Nginx负载均衡由upstream模块实现,server块仅作请求入口并用proxy_pass转发至upstream组;需在http块定义服务器组(支持weight、max_fails、backup等参数),指定least_conn/ip_hash等算法,并透传Header及设置超时。

在 Nginx 中,server 块本身不直接实现负载均衡,它只负责接收客户端请求并做路由分发;真正的负载均衡逻辑由 upstream 模块定义的服务器组 承担。server 块的作用是作为“入口”,把匹配到的请求通过 proxy_pass 转发给 upstream 组——这才是多台后端服务器分流的关键所在。
1. 在 http 块里定义 upstream 服务器组
所有后端服务必须提前在 http{...} 全局块中声明,不能放在 server 或 location 内。名称要简洁、合法(不能含下划线),例如 backend:
- 基础轮询:
server 192.168.1.10:8080;—— 按顺序轮流分发 - 加权分发:
server 192.168.1.11:8080 weight=2;—— 权重越高,承接请求越多 - 容错控制:
server 192.168.1.12:8080 max_fails=3 fail_timeout=30s;—— 连续失败 3 次,停用 30 秒 - 备用节点:
server 192.168.1.13:8080 backup;—— 主节点全挂才启用
2. 在 server 块中用 proxy_pass 接入 upstream
server 块监听端口、匹配域名或路径后,靠 proxy_pass 把流量导向 upstream 名称。注意写法规范:
- 必须写成
http://backend(协议 + 名称),不能带斜杠结尾,如http://backend/会改变 URI 语义 - 建议透传关键 Header:
proxy_set_header Host $host;、X-Real-IP、X-Forwarded-For - 加上超时设置更健壮:
proxy_connect_timeout 5s;、proxy_read_timeout 10s;
3. 选择合适调度算法并写在 upstream 开头
算法决定请求怎么落到各后端,需放在 upstream 块第一行(在所有 server 指令之前):
-
least_conn;—— 适合长连接或响应时间差异大的场景 -
ip_hash;—— 同一 IP 固定打到同一台,解决无共享 Session 问题 - 不写任何算法即为默认轮询,无需显式声明
-
hash $request_uri consistent;—— 需确认已编译支持一致性哈希模块
4. 验证配置是否生效
别跳过这步,否则上线可能出故障:
- 执行
nginx -t检查语法是否正确 - 用
systemctl reload nginx或nginx -s reload加载新配置 - 手动停掉一台后端,观察访问是否自动切到其余节点(Nginx 默认被动健康检查)
- 用
curl -I http://your-domain查看响应头中的Server或自定义标识,辅助判断分发是否均匀


















