nginx普通轮询不区分主备,backup服务器仅兜底不参与轮询;需兼顾分担与容灾时,应去掉backup,配置max_fails和fail_timeout实现健康检查自动剔除。

Nginx 的普通轮询(Round Robin)本身不区分“主”和“备用”角色——所有列在 upstream 块中的 server 都默认参与轮询调度,只要它们处于健康状态。所谓“备用服务器”,其实是通过 backup 参数显式声明的,而一旦加了 backup,该服务器就**不会参与普通轮询**,只在其他非 backup 节点全部失效时才启用。
想让某台服务器既参与轮询又具备容灾能力?不能靠 backup
如果你希望一台服务器在日常流量中分担压力(即参与轮询),同时又能作为故障兜底节点,这不是 backup 的设计目标。正确做法是:把它当作普通节点加入 upstream,并配合健康检查参数提升可靠性:
- 去掉
backup标识,直接写成server 192.168.1.104:80; - 加上
max_fails=2 fail_timeout=30s,让它在连续失败后临时下线,避免持续转发失败请求 - 确保它和其他节点一样部署相同服务、开放相同端口、网络可达
backup 的真实作用:纯兜底,不参与轮询
只有明确标记为 backup 的服务器,才会被 Nginx 排除在常规轮询队列之外。例如:
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
server 192.168.1.103:80 backup; # 这台永不接收正常请求
}
此时,即使 101 和 102 都响应缓慢但未断连,103 依然不会被轮到。它只在 101 和 102 同时被标记为不可用(比如都触发了 max_fails)后才启用。
需要“弹性扩容+自动降级”?考虑加权轮询 + 健康检查
若某台服务器性能稍弱或定位为低优先级补充节点,又希望它平时也接少量流量,推荐用加权轮询替代 backup:
- 给主力节点设高权重,如
server 192.168.1.101:80 weight=5; - 给补充节点设低权重,如
server 192.168.1.104:80 weight=1; - 所有节点共享同一套健康检查机制(
max_fails/fail_timeout)
这样它既参与轮询,又不会因权重低而抢走过多负载,还具备自动故障隔离能力。
小结:轮询里没有“半主半备”语法
Nginx 不支持某个 server “一部分时间轮询、一部分时间当 backup”。你要么把它当作普通节点(推荐),要么当作纯 backup(仅兜底)。日常运维中,绝大多数场景应选择前者,并依靠健康检查保障稳定性。











