轮询是nginx upstream默认策略,但需配套健康感知(max_fails/fail_timeout)、连接复用(keepalive+http/1.1)和超时重试(proxy_next_upstream)才能稳定生效;权重配置即启用加权轮询,非默认轮询的增强版。

轮询是 Nginx upstream 的默认负载均衡策略,无需额外声明,但要真正实现稳定、公平、低延迟的请求分发,光靠“不写就是轮询”远远不够。关键在于配置细节是否闭环——尤其是健康感知、连接复用和故障兜底这三项,缺一不可。
轮询本身不用配,但必须确认没误启其他算法
轮询自动生效的前提是 upstream 块中未出现 ip_hash、least_conn、hash 等显式指令。常见错误包括:
- 误加 round_robin 指令(Nginx 不识别,直接启动失败)
- 混用 ip_hash 和 weight(虽支持,但会破坏轮询逻辑)
- 把 server 写在 upstream 外部,或漏掉分号导致语法错误
让轮询“真有效”的三项硬性配套
纯轮询只按顺序派发请求,不判断后端是否活着、快慢或连接是否复用。以下配置必须同步补全:
- 健康感知:每台 server 后加 max_fails=2 fail_timeout=15s,Nginx 才会在连续失败后暂停调度该节点
- 连接复用:upstream 块内加 keepalive 32;,location 中配 proxy_http_version 1.1; 和 proxy_set_header Connection '';,避免频繁建连开销
- 超时与重试:设置 proxy_connect_timeout 3s;、proxy_read_timeout 10s;、proxy_next_upstream error timeout http_500;,确保单次失败能自动换节点重试
权重不是轮询的一部分,但常被误用
轮询模式下所有 server 默认权重为 1,请求严格按配置顺序循环分配。一旦写了 weight,就已切换为加权轮询——这是独立策略,不是“带权重的轮询”。若需按能力差异分配流量,应明确使用加权轮询,并注意:
- weight 必须紧跟 server 地址后,不能换行或空格错位
- 值为整数,建议控制在 1–10 范围便于估算比例(如 3:2:1)
- 权重仅影响请求数量分布,不感知实时 CPU 或响应时间,高负载时仍会继续派发
验证是否真正生效的简单方法
不要只看配置文件,要观察运行态行为:
- 用 curl -s http://your-nginx/ | grep "server" 连续请求 10 次,确认返回 IP 是否严格循环(如 101→102→103→101…)
- 手动停掉其中一台后端,再请求几次,检查是否跳过它且无超时(说明 max_fails/fail_timeout 生效)
- 用 ss -tn | grep :8000 查看 Nginx 到后端的 ESTABLISHED 连接数,确认 keepalive 复用正常(连接数远小于请求数)











