【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(一)

简介: 【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)

本篇文章介绍LNMP架构部署项目,包括Nginx安装配置、PHP安装配置、数据库Mariadb安装配置、Nginx连通PHP、PHP连通MySQL、拆分数据库至独立服务器、拆分静态资源至服务器、扩展一个web服务器。


LNMP架构

Linux Nginx Mysql PHP

Nginx不能处理动态请求,如果是动态请求,就通过fastcgi协议转交给后端的PHP程序处理

 

Nginx安装配置

第一步:安装nginx

配置官网yum仓库

1. vim /etc/yum.repos.d/nginx.repo
2. 
3. [nginx-stable]
4. name=nginx stable repo
5. baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
6. gpgcheck=1
7. enabled=1
8. gpgkey=https://nginx.org/keys/nginx_signing.key
9. module_hotfixes=true

第二步:创建虚拟用户

1. [root@Web01 ~]# groupadd -g 666 www
2. [root@Web01 ~]# useradd -u666 -g666 -M -s /sbin/nologin www

第三步:配置Nginx启动用户为www

1. [root@Web01 ~]# vim /etc/nginx/nginx.conf 
2. 
3. user  www;
4. worker_processes  auto;

第四步:启动Nginx加入开机自启动

1. [root@Web01 ~]# systemctl start nginx
2. [root@Web01 ~]# systemctl enable nginx
3. Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

PHP安装配置

第一步:配置PHP软件仓库并安装PHP

1. #配置PHP仓库
2. [root@Web01 ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
3. [root@Web01 ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
4. 
5. [root@Web01 ~]# yum remove php-mysql-5.4 php php-fpm php-common
6. 
7. #配置第三方源
8. [root@Web01 ~]# vim /etc/yum.repos.d/php.repo
9. [php-webtatic]
10. name = PHP Repository
11. baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
12. gpgcheck = 0
13. 
14. #安装PHP
15. [root@Web01 ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb --nogpgcheck

或者是使用rpm包,上传后解压。

yum -y localinstall *.rpm

第二步:修改PHP启动用户为www

1. [root@Web01 ~]#  sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
2. [root@Web01 ~]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

第三步:启动服务并设置开机自启

1. [root@Web01 ~]# systemctl start php-fpm
2. [root@Web01 ~]# systemctl enable php-fpm
3. Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

第四步:查看状态

1. [root@Web01 ~]# netstat -tnulp
2. Active Internet connections (only servers)
3. Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
4. tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1272/sshd           
5. tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1413/master         
6. tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      4133/php-fpm: maste 
7. tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3989/nginx: master  
8. tcp6       0      0 :::22                   :::*                    LISTEN      1272/sshd           
9. tcp6       0      0 ::1:25                  :::*                    LISTEN      1413/master         
10. udp        0      0 127.0.0.1:323           0.0.0.0:*                           840/chronyd         
11. udp6       0      0 ::1:323                 :::*                                840/chronyd

安装数据库mariadb-server

第一步:安装数据库

[root@Web01 ~]# yum install mariadb-server -y

第二步:启动数据库、设置开机自启动、查看状态

1. [root@Web01 ~]# systemctl start mariadb
2. [root@Web01 ~]# systemctl enable mariadb
3. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
4. [root@Web01 ~]# netstat -tnulp
5. Active Internet connections (only servers)
6. Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
7. tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1272/sshd           
8. tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1413/master         
9. tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      4133/php-fpm: maste 
10. tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      4480/mysqld         
11. tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3989/nginx: master  
12. tcp6       0      0 :::22                   :::*                    LISTEN      1272/sshd           
13. tcp6       0      0 ::1:25                  :::*                    LISTEN      1413/master         
14. udp        0      0 127.0.0.1:323           0.0.0.0:*                           840/chronyd         
15. udp6       0      0 ::1:323                 :::*                                840/chronyd

第三步:配置用户密码,默认是root

1. [root@Web01 ~]# mysqladmin password '666666' #设置密码为666666
2. [root@Web01 ~]# mysql -uroot -p666666 #登录数据库
3. Welcome to the MariaDB monitor.  Commands end with ; or \g.
4. Your MariaDB connection id is 3
5. Server version: 5.5.68-MariaDB MariaDB Server
6. 
7. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
8. 
9. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
10. 
11. MariaDB [(none)]> show databases; #查看有哪些库
12. +--------------------+
13. | Database           |
14. +--------------------+
15. | information_schema |
16. | mysql              |
17. | performance_schema |
18. | test               |
19. +--------------------+
20. 4 rows in set (0.00 sec)
21. 
22. MariaDB [(none)]> create database hehe; #创建hehe库
23. Query OK, 1 row affected (0.00 sec)
24. 
25. MariaDB [(none)]> drop database hehe; #删除hehe库
26. Query OK, 0 rows affected (0.01 sec)
27. 
28. MariaDB [(none)]> quit #退出数据库
29. Bye
30. [root@Web01 ~]#

注意:配置数据库密码需要服务启动后才能配置

 

Nginx连通PHP

1. [root@Web01 /]# cat /etc/nginx/conf.d/default.conf 
2. server {
3.         listen 80;
4.         server_name php.koten.com;
5. 
6.         location / {
7.                 root /code;
8.                 index index.php index.html;
9.         }
10. 
11.         location ~ \.php$ {
12.                 root /code;
13.                 fastcgi_pass 127.0.0.1:9000;
14.                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
15.           include fastcgi_params;
16. }
17. }
18. [root@Web01 /]# systemctl restart nginx
19. [root@Web01 /]# vim /code/index.php 
20. <?php
21.         phpinfo();
22. ?>

windows本地hosts解析后,即可访问PHP有关信息

PHP连通MySQL

1. [root@Web01 /]# vim /code/mysql.php
2. <?php
3. $servername = "localhost";
4. $username = "root";
5. $password = "123";
6. 
7.     // 创建连接
8. $conn = mysqli_connect($servername, $username, $password);
9. 
10.     // 检测连接
11. if (!$conn) {
12.         die("Connection failed: " . mysqli_connect_error());
13.     }
14. echo "php可以连接MySQL...";
15. ?>

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
25天前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
|
5天前
|
缓存 Kubernetes Java
阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战
SAE 事件中心通过智能诊断显示通知与用户连接起来,SAE WEB 百毫秒弹性实例给事件中心带来了新的实时性、海量数据和高吞吐的挑战,本篇将带您了解 SAE 整体事件中心的架构和挑战。
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
10天前
|
运维 安全 网络安全
Web安全-企业网络架构
Web安全-企业网络架构
16 1
|
1月前
|
前端开发 安全 JavaScript
构建高效Web应用:前后端分离架构的实践
【9月更文挑战第4天】在数字时代,Web应用已成为企业与用户互动的主要平台。本文将介绍如何通过前后端分离的架构设计来构建高效的Web应用,探讨该架构的优势,并分享实现过程中的关键步骤和注意事项。文章旨在为开发者提供一种清晰、高效的开发模式,帮助其在快速变化的市场环境中保持竞争力。
|
1月前
|
设计模式 存储 SQL
在web框架中实现解释器架构
【9月更文挑战第3天】解释器架构风格基于解释器设计模式,通过将问题建模为特定语言或指令集并逐条解析执行。然而,解释器风格也可能面临性能问题和扩展性限制。
25 1
|
2月前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
36 0
|
2月前
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
45 0
下一篇
无影云桌面