Nginx反向代理+upstream轮询是中小流量场景最常用的简单负载均衡方案;通过http块定义upstream后端组并默认轮询分发请求,server块中用proxy_pass引用,需注意协议与斜杠格式,并可配置weight、max_fails、backup等增强稳定性。

用 Nginx 做反向代理 + upstream 轮询,是实现简单负载均衡最常用的方式。它不依赖额外组件,配置清晰,适合中小流量场景。
upstream 块定义后端服务组
在 http 块中定义 upstream,给后端服务器集群起个名字(比如 backend_servers),然后列出所有真实服务地址:
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
默认就是轮询(round-robin)策略:请求依次分发到每个 server,自动跳过不可用节点(需配合健康检查或 fail_timeout/max_fails 使用)。
server 块中用 proxy_pass 引用 upstream
在 server 配置里,把用户请求通过 proxy_pass 转发到 upstream 名称即可:
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://backend_servers),不能写成 http://backend_servers/ 或省略协议,否则可能触发 502 或路径错乱。
可选:增强轮询的稳定性与可观测性
实际使用中建议加几项基础配置提升健壮性:
-
weight:手动指定权重,例如
server 192.168.1.10:8080 weight=3;表示该节点接收 3 倍于默认的请求量 -
max_fails & fail_timeout:例如
server 192.168.1.10:8080 max_fails=2 fail_timeout=30s;,表示 30 秒内失败 2 次就临时剔除该节点 - backup:标记为备用节点,仅当其他节点全不可用时才启用,适合灾备实例
- 可通过
nginx -t检查语法,nginx -s reload热更新配置
验证轮询是否生效
启动所有后端服务后,反复访问 Nginx 对外地址,观察日志或后端 access 日志:
- 每刷新一次,access.log 中的 remote_addr 应该交替出现在不同后端机器上
- 可临时在各后端返回响应头中加入标识,如
X-Backend-ID: node-a,方便 curl 直接观察 - 若始终打到同一台,检查 upstream 名称是否拼写一致、proxy_pass 是否引用正确、后端是否真能连通


















