Nginx多后端负载均衡核心是upstream定义服务器组并配合proxy_pass转发,需正确配置weight、max_fails/fail_timeout、backup/down等参数,并选用轮询/ip_hash/least_conn等算法,同时设置X-Real-IP等关键请求头及超时参数,最后通过nginx -t和实际故障模拟验证生效。

用 Nginx 实现多后端服务器的负载均衡,核心是通过 upstream 模块定义服务器组,并结合 proxy_pass 将请求转发过去。配置不复杂,但关键参数必须设对,否则容易出现请求卡顿、单点失效不剔除、会话丢失等问题。
定义 upstream 服务器组
在 http 块内声明一组后端服务,这是负载均衡的起点。每台服务器可带参数控制行为:
- 直接写 IP 或域名,如
server 192.168.1.101:8080;,默认启用轮询 - 加权重:如
server 192.168.1.101:8080 weight=3;,适合新老机器性能差异大的场景 - 健康检查兜底:加上
max_fails=2 fail_timeout=30s,表示连续失败 2 次后,30 秒内不再发请求给这台机器 - 标记备用机:
server 192.168.1.103:8080 backup;,仅当其他全不可用时才启用 - 临时下线:
server 192.168.1.104:8080 down;,用于维护期间平滑摘流
选择合适的调度算法
算法决定请求怎么分,选错会导致负载不均或会话中断:
- 轮询(默认):请求依次打到各服务器,适合无状态、配置相近的服务
- ip_hash:同一客户端 IP 始终落到同一台后端,适用于依赖本地 session 的老系统
- least_conn:把新请求发给当前活跃连接最少的服务器,适合长连接类业务(如 WebSocket)
- hash $request_uri:按请求路径哈希,适合缓存穿透防护或 CDN 回源一致性场景
反向代理配置要传关键头信息
只写 proxy_pass 不够,后端常需真实客户端信息:
-
proxy_set_header Host $host;:保留原始 Host,避免后端生成错误跳转链接 -
proxy_set_header X-Real-IP $remote_addr;:让后端拿到真实用户 IP -
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:支持多层代理下的 IP 追溯 -
proxy_connect_timeout 15s;、proxy_read_timeout 60s;:避免后端响应慢拖垮 Nginx
验证与基础运维要点
配完不能只 reload 就完事,得确认是否生效:
- 用
nginx -t检查语法,再nginx -s reload生效 - 访问几次,看后端日志或页面返回内容是否轮换(比如两台服务器返回不同标识)
- 手动停掉一台后端,观察流量是否自动切到另一台,且无超时——这验证了
max_fails是否起作用 - 生产环境建议把 upstream 单独抽成文件(如
/etc/nginx/upstreams/backend.conf),便于复用和管理


















