Nginx负载均衡集群实验步骤
本实验基于 “1 台 Nginx 代理服务器 + 2 台后端 Web 服务器” 架构,实现基础负载均衡功能(以轮询策略为例),适用于 Linux 环境(如 CentOS 7/8、Ubuntu)。
一、实验环境准备
1. 服务器规划
先明确 3 台服务器的角色、IP 及所需软件,避免配置混乱:
角色 | IP 地址(示例) | 核心软件 | 作用 |
---|---|---|---|
负载均衡器 | 192.168.1.10 | Nginx(需启用负载模块) | 接收用户请求,分发到后端 |
后端 Web 服务器 1 | 192.168.1.11 | Nginx/Apache/Tomcat | 实际处理请求,返回页面 |
后端 Web 服务器 2 | 192.168.1.12 | Nginx/Apache/Tomcat | 与后端 1 功能一致,实现冗余 |
2. 基础环境检查
所有服务器需完成以下操作,确保网络和权限正常:
- 关闭防火墙(实验环境简化,生产环境需配置端口放行):
CentOS:systemctl stop firewalld && systemctl disable firewalld
Ubuntu:ufw disable
- 关闭 SELinux(避免拦截 Nginx 请求):
临时关闭:setenforce 0
永久关闭:编辑/etc/selinux/config
,将SELINUX=enforcing
改为SELINUX=disabled
(需重启生效) - 测试网络互通:在负载均衡器上 ping 两台后端服务器,确保能通:
ping 192.168.1.11 -c 3
、ping 192.168.1.12 -c 3
二、部署后端 Web 服务器(2 台操作相同)
后端服务器只需提供 “可访问的 Web 页面” 即可,此处以 Nginx 为例(Apache 操作类似,最后需配置测试页面)。
1. 安装 Nginx
- CentOS:
先安装 EPEL 源:yum install epel-release -y
再装 Nginx:yum install nginx -y
- Ubuntu:
更新源:apt update
装 Nginx:apt install nginx -y
2. 配置 “差异化测试页面”
为了后续验证 “负载均衡是否生效”,需给两台后端服务器配置不同内容的首页(方便区分请求分发到哪台):
- 后端 1(192.168.1.11):
echo "<h1>Backend Server 1 (192.168.1.11)</h1>" > /usr/share/nginx/html/index.html
- 后端 2(192.168.1.12):
echo "<h1>Backend Server 2 (192.168.1.12)</h1>" > /usr/share/nginx/html/index.html
3. 启动并验证后端服务
- 启动 Nginx:
systemctl start nginx && systemctl enable nginx
- 本地验证:在后端服务器上执行
curl localhost
,应显示对应服务器的测试页面(如后端 1 显示 “Backend Server 1”); - 跨机验证:在负载均衡器上执行
curl 192.168.1.11
和curl 192.168.1.12
,确保能获取到后端页面(排除网络或服务故障)。
三、部署负载均衡器(192.168.1.10)
核心是通过 Nginx 的 upstream
模块配置后端服务器集群,实现负载分发。
1. 安装 Nginx
操作与 “后端服务器安装 Nginx” 一致(CentOS 用 yum,Ubuntu 用 apt)。
2. 配置负载均衡规则
编辑 Nginx 主配置文件 /etc/nginx/nginx.conf
(或在 /etc/nginx/conf.d/
下新建 loadbalance.conf
,推荐后者,避免修改主配置):
步骤 1:备份原配置(避免出错无法恢复)
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
步骤 2:编辑配置文件
用 vim 打开配置文件:vim /etc/nginx/nginx.conf
在 http { ... }
块内添加以下内容(关键是 upstream
集群定义和 proxy_pass
转发):
http {# 1. 定义后端服务器集群(名称可自定义,如 backend_servers)upstream backend_servers {# 轮询策略(默认,无需额外配置),添加两台后端服务器IPserver 192.168.1.11:80; # 后端1,80为Web服务端口server 192.168.1.12:80; # 后端2# 可选:添加权重(如 server 192.168.1.11:80 weight=2; 表示请求占比2/3)}# 2. 配置虚拟主机,接收用户请求并转发到集群server {listen 80; # 负载均衡器监听80端口(用户访问的端口)server_name localhost; # 实验用localhost,生产用域名# 所有请求(/)转发到后端集群location / {proxy_pass http://backend_servers; # 指向上面定义的集群名称# 可选:添加代理请求头(让后端获取真实客户端IP等信息)proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
步骤 3:检查配置语法(关键!避免启动失败)
nginx -t
若显示 nginx: configuration file /etc/nginx/nginx.conf test is successful
,说明配置无语法错误;若报错,需根据提示修正(如 IP 写错、括号不匹配)。
3. 启动负载均衡器 Nginx
systemctl start nginx && systemctl enable nginx
四、验证负载均衡效果
通过 “多次访问负载均衡器 IP”,观察页面是否在两台后端服务器之间切换,验证轮询策略是否生效。
1. 客户端验证(推荐)
在 Windows/macOS 客户端(需与服务器同网段)打开浏览器,输入负载均衡器 IP http://192.168.1.10
,刷新页面多次:
- 第一次刷新:显示 “Backend Server 1 (192.168.1.11)”
- 第二次刷新:显示 “Backend Server 2 (192.168.1.12)”
- 第三次刷新:回到 “Backend Server 1”
(若配置了权重,会按权重比例切换,如权重 2:1 时,2 次 1 台、1 次另一台)
2. 命令行验证(更精准)
在任意服务器(或客户端)执行 curl http://192.168.1.10
多次,观察输出结果:
# 第一次执行
curl http://192.168.1.10
<h1>Backend Server 1 (192.168.1.11)</h1># 第二次执行
curl http://192.168.1.10
<h1>Backend Server 2 (192.168.1.12)</h1>
五、可选:测试后端服务器容错性
负载均衡的核心优势之一是 “后端故障时自动剔除”,可手动停止一台后端服务器,验证请求是否仅分发到正常服务器:
- 在后端 1(192.168.1.11)上停止 Nginx:
systemctl stop nginx
- 再次访问
http://192.168.1.10
(多次刷新),此时所有请求均会分发到后端 2(192.168.1.12),不会出现 “502 错误”; - 恢复后端 1:
systemctl start nginx
,刷新页面,请求会重新在两台后端之间轮询。
六、常见问题排查
访问负载均衡器 IP 显示 “502 Bad Gateway”:
- 检查后端服务器是否启动:
systemctl status nginx
(后端服务器上执行); - 检查负载均衡器能否 ping 通后端:
ping 192.168.1.11
; - 检查 Nginx 配置中
upstream
的 IP 和端口是否正确(如后端用 8080 端口,需写server 192.168.1.11:8080
)。
- 检查后端服务器是否启动:
刷新页面始终显示同一后端:
- 检查是否配置了 “会话保持”(如
ip_hash
策略,实验用轮询需删除该配置); - 浏览器可能缓存页面,建议用 “无痕模式” 或命令行
curl
验证。
- 检查是否配置了 “会话保持”(如
nginx -t
报错 “unknown directive”:- 检查配置文件的括号是否匹配(如
upstream { ... }
少了右括号); - 检查指令拼写(如
proxy_pass
写成proxy_passs
)。
- 检查配置文件的括号是否匹配(如