Nginx轮询负载均衡默认启用,upstream必须定义在http块内、server块外;server行需规范书写并以分号结尾;配合proxy_pass引用才能生效,可选max_fails和fail_timeout实现基础健康检查。

直接在 http 块里定义 upstream,里面只写 server 行,不加任何额外参数,Nginx 就自动启用轮询——它本来就是默认策略,不需要声明,也不接受 round_robin 这类关键词。
upstream 必须放在 http 块内
不能塞进 server 或 location 里,否则 Nginx 启动会报错 unknown directive "upstream"。正确位置是主配置文件(如 /etc/nginx/nginx.conf)的 http { ... } 大括号内部、所有 server 块外部。
- ✅ 正确示例:
http {<br> upstream myapp {<br> server 192.168.1.10:8080;<br> server 192.168.1.11:8080;<br> }<br> server { ... }<br>} - ❌ 错误写法:把
upstream写在server { ... }里面
server 行写法要规范
每行一个后端地址,支持 IP、域名、端口组合,末尾必须加分号;顺序即轮询顺序,Nginx 按照它们出现的先后逐个分发请求。
- ✅ 可用格式:
server backend.example.com:3000;、server 10.0.0.5 weight=2; - ❌ 禁止写法:
server 10.0.0.5; weight=2;(weight 不在 server 行内)、server 10.0.0.5 weight = 2;(空格或等号多余) - 未设
weight的服务器,默认权重为 1,流量均分
配合 proxy_pass 才真正生效
定义好 upstream 后,必须在 location 中用 proxy_pass http://myapp; 引用它,而不是直接写死某台后端地址。同时建议加上基础头信息传递:
proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;- 别忘了用
nginx -t测试语法,再systemctl reload nginx生效
简单故障隔离可选配置
轮询本身不带健康检查,但可以给每个 server 加上 max_fails 和 fail_timeout 来实现基础容错:
server 192.168.1.10:8080 max_fails=2 fail_timeout=10s;- 连续失败 2 次后,10 秒内不再向这台机器转发请求
- 所有 server 都失败时,Nginx 会尝试 fallback 到最近成功响应过的节点


















