down参数是nginx upstream中用于静态标记服务器彻底下线的轻量级方式,必须置于server行末尾单独使用,reload后立即生效:不参与负载均衡、不触发健康检查、不参与故障转移。

用 down 指令配合 CI/CD 实现集群节点平滑下线,关键在于把 Nginx upstream 的静态标记能力,嵌入到发布流程中——不依赖健康检查延迟,不触发探测扰动,reload 即生效,真正“秒级隔离”。
在 upstream 配置中正确使用 down 参数
down 是 Nginx 原生支持的上游服务器标记,必须写在 server 行末尾,且不能与其他参数混用:
- ✅ 正确写法:
server 10.0.1.5:8080 down; - ❌ 错误写法:
server 10.0.1.5:8080 max_fails=2 down;(语法校验失败) - ❌ 错误写法:
server 10.0.1.5:8080; down;(down 不是独立指令,必须紧贴 server)
该配置 reload 后立即生效:该节点不再接收新请求、不发健康探测、不参与故障转移,其他节点完全无感。
将 down 配置纳入 CI/CD 流水线环节
建议在部署前的“预下线”阶段注入 down 标记,而非靠人工改配置。常见做法:
- 用模板引擎(如 envsubst、gomplate 或 Ansible)动态渲染 upstream 配置,根据当前发布目标自动标记对应节点为
down - 在流水线脚本中执行类似操作:
sed -i 's/server 10\.0\.1\.5:8080;/server 10.0.1.5:8080 down;/' nginx.conf - 结合配置中心(如 Consul Template、Nacos)实现更灵活的节点状态驱动,down 状态由服务注册元数据(如
status=offline)自动映射
与 backup 节点协同实现自动流量接管
若需下线主节点的同时让备用机立刻承接流量,提前在 upstream 中定义 backup:
-
server 10.0.1.5:8080 down;(待维护主节点) -
server 10.0.1.6:8080 backup;(备用节点,平时不参与轮询)
当所有非 backup 节点都被标记 down 或实际宕机时,backup 自动激活——无需修改负载策略,也无需等待健康检查收敛。
下线后验证与恢复闭环
CI/CD 流程不应止于“切走”,还需保障可回溯、可验证:
- 下线后自动调用
curl -s http://nginx-status/upstream_show(需启用 stub_status)确认目标节点已从活跃列表消失 - 采集 access_log 最后一条时间戳,确认 30 秒内无新增请求进入该节点
- 维护完成后,流水线自动删除 down 标记并 reload;也可保留带 down 的配置作为灰度开关,通过变量控制是否启用
整个过程零重启主进程、零连接中断、零人工干预,把运维动作变成可版本化、可审计、可自动化的标准步骤。










