Nginx轮询负载均衡默认启用,需在http块内定义upstream并用proxy_pass引用;server地址须写全IP和端口,名称大小写敏感且必须带协议前缀;故障节点自动剔除约10秒。

基础的 Nginx 轮询负载均衡只需定义 upstream 块并配合 proxy_pass,无需额外关键字——轮询是默认行为,配置简单但位置和语法必须准确。
upstream 必须放在 http 块内
不能写在 server 或 location 里,否则启动时会报 unknown directive "upstream" 错误。
- 正确结构:在
http { ... }大括号内部定义 upstream - 示例:
http { upstream myapp { server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; } server { location / { proxy_pass http://myapp; } } }
server 地址要写全 IP 和端口
Nginx 不解析 localhost,也不自动补端口,必须显式写出可连通的地址。
- 推荐用
127.0.0.1而非localhost,避免 DNS 解析延迟影响故障转移 - 端口不可省略,哪怕后端是 80 或 443;例如
server 127.0.0.1:3000不能写成server 127.0.0.1 - 每行末尾只加分号
;,不要逗号、斜杠或其他符号
proxy_pass 引用必须严格匹配
proxy_pass 后的名称要和 upstream 块名完全一致(区分大小写),且必须带协议前缀。
- ✅ 正确:
proxy_pass http://myapp; - ❌ 错误:
proxy_pass myapp;(缺协议)、proxy_pass http://MyApp;(大小写不符)、proxy_pass http://myapp/;(末尾斜杠可能引发 URI 重写问题)
轮询自动生效,无需额外指令
只要没写 ip_hash、least_conn 或 hash 等调度指令,Nginx 就按加权轮询(weight=1 时即等效于简单轮询)分发请求。
- 请求不是机械式“1→2→3→1”,而是基于当前连接数动态调整,更贴近实际负载
- 某台服务器返回 502/503/504 或超时,Nginx 会临时标记它为不可用约 10 秒(由
fail_timeout控制),期间跳过该节点 - 若需临时下线某节点,加
down参数;设为weight=0效果相同


















