1.每日复盘与今日内容
1.1复盘
- LNMP结构
- PHP部署、mariadb数据库🍟🍟🍟
- wordpress部署、知乎部署
1.2今日内容
- LNMP拆分
- 扩展多台WEB服务器
- 静态配置、动态挂载NFS🍟🍟🍟
- 正向代理、反向代理🍟🍟🍟
- 负载均衡基础🍟🍟🍟🍟🍟
2.LNMP架构拆分
- 为什么?
由于单台服务器运行LNMP架构会导致网站访问缓慢,当内存被占满时,很容易导致系统出现oom从而kill掉MySQL数据库,所以要将web和数据库进行独立部署。
- 静态数据 做缓存处理(CDN)
固定不变:一旦生成,内容不会随时间或操作改变(除非人为修改)
- 动态数据 不能做缓存(部分)
实时变化:内容会随时间、用户交互或系统状态不断更新。
- 数据库拆分后解决了什么问题
1.缓解web网站的压力
2.增强数据库读写性能
3.提高用户访问速度

-
步骤拆分
第一步:创建51,安装mariadb服务
第二步:将web01上的所有库倒出
第三步:将wordpress库 zh库 数据库的用户名和密码一起导入到51服务器
第四步:将wordpress业务和zh业务中代码指向新的数据
1.创建10.0.0.51,安装mariadb服务
yum -y install mariadb-server
systemctl start mariadb
systemctl enable mariadb
2.将web01上的所有库倒出
mysqldump -uroot -plzy123.com -A > all.sql
scp all.sql 10.0.0.51:~
3.将all.sql导入到51的库
#导入
[root@db01 ~]# mysql -uroot < all.sql
#重启数据库
[root@db01 ~]# systemctl restart mariadb
#查看数据导入是否成功
[root@db01 ~]# mysql -uroot -plzy123.com -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| wordpress |
| zh |
+--------------------+
-
db01连接web01时,无法使用root登录
远程连接数据库的命令
WEB01测试和DB01的连通性
mysql -h 172.16.1.51 -uroot -plzy123.com#默认mysql禁止root远程连接
[root@web01 ~]# mysql -h 172.16.1.51 -uroot -plzy123.com
ERROR 1130 (HY000): Host '172.16.1.7' is not allowed to connect to this MariaDB server#需要创建远程连接的普通用户--在db01中添加
#授权所有权限 grant all
#授权所有库所有表 .
#将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) 'all'@'%'
#授权该用户登录的密码 identified by
[root@db01 ~]# mysql -uroot -plzy123.com -e "grant all on . to lzy@'%' identified by 'lzy123.com';"
[root@db01 ~]# mysql -uroot -plzy123.com -e "flush privileges;"#使用lzy用户远程连接数据库测试
web01执行:
[root@web01 ~]# mysql -h 172.16.1.51 -ulzy -plzy123.com
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.3.39-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit # 退出
Bye
4.修改wp数据库的指向
#1.停止WEB服务器上的mariadb
HTTP:401 用户密码验证失败
HTTP:500 无法连接数据库
[root@web01 ~]# systemctl stop mariadb
[root@web01 ~]# systemctl disable mariadb
#2.将代码中的数据库指向到51服务器
#将包含数据库信息的文件查找
[root@web01 wordpress]# grep -r 'lzy123.com' ./*
./wp-config.php:define( 'DB_PASSWORD', 'lzy123.com' );
#修改配置文件
[root@web01 wordpress]# grep '^define' wp-config.php
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'lzy' );
define( 'DB_PASSWORD', 'lzy123.com' );
define( 'DB_HOST', '172.16.1.51' );
#测试访问www.wp.com恢复正常


-
开发软件
软件-->测试-->运维
软件说明
配置环境
依赖
服务
配置
启动方式
每个配置文件说明
python test.py -h
xxx
xxxx
xxxx
5.修改zh数据库指向
[root@web01 zh]# grep -r 'lzy123.com' ./*
./system/config/database.php: 'password' => 'lzy123.com',
[root@web01 zh]# vim ./system/config/database.php
<?php
$config['charset'] = 'utf8mb4';^M
$config['prefix'] = 'aws_';^M
$config['driver'] = 'MySQLi';^M
$config['master'] = array (
'charset' => 'utf8mb4',
'host' => '172.16.1.51', # 修改为远程数据库主机IP
'username' => 'lzy', # 修改为远程用户
'password' => 'lzy123.com',
'dbname' => 'zh',
);^M
$config['slave'] = false;^M
#测试访问www.zh.com恢复业务
6.扩展多台相同的Web服务器
为什么要扩展多台web节点
单台web服务器能抗住的访问量是有限的,配置多台web服务器能提升更高的访问速度。
扩展多台web解决了什么问题
1.单台web节点如果故障,会导致业务down机
2.多台web节点能保证业务的持续稳定,扩展性高
3.多台web节点能有效的提升用户访问网站的速度
4.多台web节点技术架构组成,如下图所示

7.创建WEB02
vb
`#Nginx
1.配置nginx仓库
[root@web02 ~]# scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
2.通过官网仓库安装nginx
[root@web02 ~]# yum -y install nginx
3.将web01上的server全拷贝到web02
[root@web02 ~]# rsync -avz 10.0.0.7:/etc/nginx/conf.d/ /etc/nginx/conf.d/
#PHP
1.安装php服务
[root@web02 ~]# yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-process php-xml php-json
2.同步php配置文件
[root@web02 ~]# scp 10.0.0.7:/etc/php-fpm.d/www.conf /etc/php-fpm.d/
#测试nginx和php并启动
[root@web02 ~]# groupadd -g666 www
[root@web02 ~]# useradd -u666 -g666 -M -s /sbin/nologin www
vim /etc/nginx/nginx.cinf
usr www;
[root@web02 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web02 ~]# php-fpm -t
[14-Aug-2025 10:24:54] NOTICE: configuration file /etc/php-fpm.conf test is successful
[root@web02 ~]# systemctl start nginx php-fpm
[root@web02 ~]# systemctl enable nginx php-fpm
查看是否启动成功 9000和80端口
[root@web02 ~]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 961/sshd: /usr/sbin
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 58866/php-fpm: mast
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 58867/nginx: master
tcp6 0 0 :::22 :::* LISTEN 961/sshd: /usr/sbin
udp 0 0 127.0.0.1:323 0.0.0.0:* 625/chronyd
udp6 0 0 ::1:323 :::* 625/chronyd `

将web01的代码拷贝到web02
[root@web01 ~]# tar zcvf code.tar.gz /code
[root@web01 ~]# scp code.tar.gz 10.0.0.8:~
#web02解压代码到/目录
[root@web02 ~]# tar xf code.tar.gz -C /
#将windows hosts解析到web02
10.0.0.8 www.wp.com www.zh.com
- 成功

8.静态文件实现一致性
拆分静态资源至独立服务器
为什么拆分静态资源至独立存储服务器
当后端的web节点出现多台时,会导致用户上传的图片、视频附件等内容仅上传至一台web服务器,那么其他的web服务器则无法访问到该图片。
新增一台nfs存储解决了什么问题
1.保证了多台web节点静态资源一致。
2.有效节省多台web节点的存储空间。
3.统一管理静态资源,便于后期推送至CDN进行静态资源加速

windows hosts
10.0.0.8 www.wp.com
WEB02上传一张图片

windows解析一下
10.0.0.7 www.wp.com

原因:10.0.0.7服务器没有/code/wordpress/wp-content/uploads这个目录,所以图片找不到。
9.部署NFS服务
10.0.0.31服务器
1.安装nfs
yum -y install nfs-utils
2.配置nfs
[root@nfs ~]# cat /etc/exports
/data/wp 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
3.创建必要数据
[root@nfs ~]# groupadd -g666 www
[root@nfs ~]# useradd -u666 -g666 -M -s /sbin/nologin www
[root@nfs ~]# ll /data/
total 0
drwxr-xr-x 2 root root 6 Aug 14 11:08 wp
drwxr-xr-x 2 root root 6 Aug 14 11:08 zh
[root@nfs ~]# chown -R www.www /data/
[root@nfs ~]# ll /data/
total 0
drwxr-xr-x 2 www www 6 Aug 14 11:08 wp
drwxr-xr-x 2 www www 6 Aug 14 11:08 zh
4.启动nfs
[root@nfs ~]# systemctl restart nfs
[root@nfs ~]# systemctl enalble nfs
5.客户端测试
#安装软件但是不启动
[root@web01 ~]# yum -y install nfs-utils
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/zh 172.16.1.0/24
/data/wp 172.16.1.0/24
10.将比较全的静态资源拷贝到31
1.WEB02最全的拷贝到31的/data/wp
[root@web02 ~]# scp -r /code/wordpress/wp-content/uploads/* 10.0.0.31:/data/wp/
2.挂载NFS到web01和web02
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/wp /code/wordpress/wp-content/uploads/
[root@web02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 459M 0 459M 0% /dev
tmpfs 475M 0 475M 0% /dev/shm
tmpfs 475M 13M 462M 3% /run
tmpfs 475M 0 475M 0% /sys/fs/cgroup
/dev/sda3 48G 4.3G 44G 9% /
/dev/sda1 195M 122M 74M 63% /boot
tmpfs 95M 0 95M 0% /run/user/0
172.16.1.31:/data/wp 48G 3.8G 45G 8% /code/wordpress/wp-content/uploads


- 配置好后将window的hosts换到10.0.0.7查看发现可以看到

- 但会发现没有办法上传图片--权限不够(写文章/上传)

chown -R www.www /data/wp
- 原因是之前的/data/wp下的文件是以root写入的 www只有看的权限没有修改的权限,修改权限即可
11.代理
- 正向代理
为用户提供服务--给用户分配公网ip等
- 反向代理
为服务器提供服务--给用户分配服务器(一个用户一台)
-
小试牛刀
#1.创建10.0.0.5 LB01
#2.安装并部署Nginx
yum -y install nginx
scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/#WEB01准备静态页面
[root@web01 conf.d]# cat www.oldboy.conf
server {
listen 80;
server_name www.oldboy.com;location / { root /code/test; index index.html; }
}
[root@web01 conf.d]# echo web01.... > /code/test/index.html
[root@web01 conf.d]# nginx -t
synginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 conf.d]# systemctl reload nginx#3.配置nginx反向代理
[root@lb01 conf.d]# cat lb.conf
server {
listen 80;
server_name www.oldboy.com;location / { proxy_pass http://10.0.0.7; }
}
[root@lb01 conf.d]# systemctl start nginx#4.测试
windows的hosts指向10.0.0.5
10.0.0.5 www.oldboy.com
12.反向代理相关参数
proxy_set_header Host $http_host; # 携带头部信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录客户真实的IP地址
|---------------------------|------------------------------------------------------------------------------------------------------------|
| 参数 | 作用 |
| proxy_connect_timeout 30; | 定义 Nginx 与后端服务器建立 TCP 连接的最大时间。 值:30 秒(超时后返回 504 Gateway Timeout)。 场景:后端服务器网络延迟高或负载过高时,适当调大此值(如 60s)。 |
| proxy_send_timeout 60; | 定义 Nginx 向后端发送请求数据的超时时间。 值:60 秒(超时后中断连接)。 场景:客户端上传大文件或后端处理缓慢时,需增加此值。 |
| proxy_read_timeout 60; | 定义 Nginx 从后端读取响应数据的超时时间。 值:60 秒(超时后中断连接)。 场景:后端处理耗时较长(如复杂计算、长轮询)时需调高。 |
| proxy_buffering on; | 启用代理响应缓冲(默认开启)。 效果:Nginx 会先将后端返回的响应数据存入内存/磁盘缓冲区,再逐步发送给客户端。 优点:减轻后端服务器压力,优化慢客户端的传输效率。 缺点:可能增加内存占用,实时性略降低。 |
| proxy_buffer_size 32k; | 作用:设置单个缓冲区的大小,用于存储后端响应的第一部分(如响应头)。 值:32KB(默认通常为 4KB 或 8KB)。 关键点:这部分数据会直接发送给客户端,需确保足够容纳响应头(如 Set-Cookie 等)。 |
| proxy_buffers 4 128k; | 作用:设置缓冲区的数量和大小,用于存储后端响应的内容体。 值:4 个缓冲区 × 每个 128KB(总缓冲容量 = 4 × 128KB = 512KB)。 |
10.0.0.5配置
[root@lb01 conf.d]# cat lb.conf
upstream webs {
server 10.0.0.7;
server 10.0.0.8;
}
server {
listen 80;
server_name www.wp.com;
location / {
proxy_pass http://webs;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
}
}
刷新发现一会web01(10.0.0.7) web02(10.0.0.8)


3.今日总结
- LNMP拆分
- 扩展多台WEB服务器
- 静态配置、动态挂载NFS🍟🍟🍟
- 正向代理、反向代理🍟🍟🍟
- 负载均衡基础🍟🍟🍟🍟🍟
