Nginx负载均衡多服务器分发从配置到验证完整指南
什么时候需要Nginx做负载均衡?
当你网站访问量增加,单台服务器扛不住流量或偶尔宕机时,Nginx的负载均衡功能可以把用户请求分发给多台后端服务器,既分担压力又提升可用性。
简单说,一台服务器不够用,就用Nginx在前方当调度员,把请求均匀分给两台或多台机器。
准备工作:你需要什么?
- 两台或更多后端服务器:运行相同应用(比如Web服务),IP地址不同。假设有两台:192.168.1.10 和 192.168.1.20,端口都是80。
- 一台Nginx服务器:作为反向代理和负载均衡器。可以是单独的Linux机器,安装Nginx。
- 基础权限:能通过SSH登录Nginx服务器,使用sudo命令。
如果后端服务器部署了不同应用,记得先让它们各自提供相同服务接口,否则负载均衡后用户可能看到不同内容。
核心配置:手把手编写nginx.conf
登录Nginx服务器,
编辑主配置文件(通常位于 /etc/nginx/nginx.conf),
或者更好做法:
在 /etc/nginx/conf.d/ 下新建一个配置文件,
例如 loadbalance.conf。
第一步:定义上游服务器组
在 http 块内(如果没有,直接写在 http 块里),添加一个 upstream 块,给后端服务器起个名字(比如 backend_servers):
upstream backend_servers {
server 192.168.1.10:80;
server 192.168.1.20:80;
}
默认使用轮询策略(round-robin),即按顺序轮流分发请求。
如果想加权重,可以在地址后加 weight=2 等。
第二步:配置server块反向代理
在 server 块中,把请求转发给刚才定义的 upstream 组。
例如监听80端口,域名是 example.com:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
注意:proxy_pass 后面写 http:// + 上游组名称,不需要加端口(已在upstream里定义)。
三条 proxy_set_header 用来传递真实客户端IP信息,很有用。
保存文件后,测试配置是否正确:
sudo nginx -t
看到 syntax is ok 和 test is successful 即可。
第三步:重载Nginx使配置生效
sudo systemctl reload nginx # 或 sudo nginx -s reload
没有报错就完成了配置。
现在用户访问 example.com 时,Nginx会把请求分发给两台后端服务器。
常见坑点与解决办法
问题1:后端服务器响应502 Bad Gateway
- 检查后端服务是否正常运行:在Nginx服务器上直接curl后端IP:端口,看能否返回内容。
- 确认Nginx与后端网络互通,防火墙是否放行了对应端口。
问题2:用户登录状态丢失(session不一致)
- 轮询策略下,同一用户的请求可能落在不同后端,导致session意外切换。解决办法:
- 使用ip_hash策略,让同一IP的请求固定分发到同一台服务器(在upstream块加
ip_hash;)。 - 或者集中存储session到Redis等共享缓存,后端共享session数据。
问题3:某台后端宕机后仍被转发请求
- 默认情况下,Nginx不会自动踢掉故障节点。建议加上健康检查参数:
upstream backend_servers {
server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
server 192.168.1.20:80 max_fails=3 fail_timeout=30s;
}
这样连续失败3次后,该服务器会被暂时标记为不可用,30秒后再尝试。
验证负载均衡是否生效
最简单的方法:在两台后端服务器上分别放置不同内容(比如根目录下 index.html 写上不同文字),然后反复访问 example.com,刷新几次看是否轮换显示不同页面。
也可以用命令行验证:
curl -I http://example.com
多次执行,观察响应的Server头或自定义返回内容是否交替。
更严谨的方式:
查看Nginx日志 /var/log/nginx/access.log,
每一行记录中 $upstream_addr 字段会显示实际处理请求的后端IP,
确认是否均匀分发。
现在你已经掌握了Nginx负载均衡多服务器分发的完整操作流程。
实际部署中可根据需求调整策略(ip_hash、least_conn等),并考虑在后端加入健康检查和监控报警。
建议先从两节点起步,稳定后再扩展。
如果遇到本文未覆盖的问题,欢迎在评论区留言交流。