down参数可立即逻辑下线后端服务器,不参与负载均衡、健康检查与故障转移;修改配置后reload即生效,零中断、无探测流量、不影响其他节点。

直接在 upstream 块中给某台后端服务器加上 down 参数,就能让它立即停止接收任何新请求——不参与负载均衡、不被探测、不参与故障转移,相当于“逻辑下线”。这是最轻量、最可控的手动隔离方式,适合计划内维护或临时规避已知问题节点。
down 参数的作用机制
它不是靠失败计数或超时判断,而是静态标记。Nginx 在初始化 upstream 时就读取该状态,后续所有请求调度都会跳过带 down 的 server 条目。它不依赖健康检查开关,也不受 max_fails / fail_timeout 影响,是彻底的“人工屏蔽”。
- 生效无需 reload:修改配置后执行 nginx -s reload 即可,不中断其他服务
- 不产生探测流量:不像主动健康检查(如 health_check),它不会向该节点发任何探测请求
- 不影响其他节点:其余 server 条目照常参与权重分配与容错逻辑
典型配置写法
在 upstream 块中明确标注需隔离的节点:
upstream backend_servers {
server 127.0.0.1:8001 weight=3;
server 127.0.0.1:8002 weight=1;
server 127.0.0.1:8003 down; # ← 这台立刻离线,不再转发
}
注意:down 必须写在 server 行末尾,不能加在分号前或换行;它不能与其他动态参数(如 max_fails)混用在同一行,否则配置校验会失败。
配合 backup 实现平滑接管
若你希望隔离主节点的同时,自动启用备用节点承接流量,可以把备用机标为 backup:
- 正常时:只有非 backup 的 server 参与轮询
- 当所有非 backup 节点都被设为 down 或实际宕机,backup 才会被激活
- 例如:server 127.0.0.1:8004 backup; —— 它平时完全静默,只在需要时顶上
恢复上线的操作步骤
维护完成后,只需三步还原:
- 确认后端服务已就绪(如 curl http://localhost:8003 能返回预期响应)
- 从 upstream 配置中删掉 down 关键字
- 执行 nginx -s reload,流量即刻回归
整个过程零请求丢失,且无需重启 Nginx 主进程,对线上业务无感。











