Nginx可通过组合配置实现紧急停机:1. upstream中所有server标记down;2. location中用return直接返回503降级响应;3. 注释健康检查与proxy_next_upstream相关指令;4. reload后秒级生效,回切只需还原配置并reload。

当后端集群需要紧急停机(如发布、故障隔离或安全响应),Nginx 本身不提供“一键关停全部 upstream”的开关,但可通过组合配置实现快速、可控、无请求穿透的紧急停机模式——核心思路是:让所有流量立即转向本地降级响应,同时阻断对后端的任何新连接尝试。
1. 立即禁用所有 upstream 节点
在 upstream 块中,将所有 server 标记为 down,Nginx 会立刻停止向其转发任何请求:
upstream backend_cluster {
server 10.0.1.10:8080 down;
server 10.0.1.11:8080 down;
server 10.0.1.12:8080 down;
}
该操作无需重启,执行 nginx -s reload 后立即生效。注意:down 是静态标记,不受健康检查影响,即使节点恢复也不会自动重新启用。
2. 强制拦截并重写所有代理请求
在 location 中绕过 proxy_pass,直接返回预设的兜底响应:
- 移除或注释掉原有的
proxy_pass http://backend_cluster; - 改用
return或error_page快速响应
location / {
# 不再代理,直接返回
return 503 '{"status":"maintenance","message":"Service temporarily unavailable"}';
add_header Content-Type "application/json; charset=utf-8";
}
3. 配合健康检查防止“误复活”
即使节点被标为 down,若配置了主动健康检查(如 check 指令),部分模块可能仍尝试探测。为彻底杜绝意外转发:
- 临时注释或删除
check、health_check等主动探测指令 - 确保
proxy_next_upstream不包含error timeout—— 避免失败后尝试其他节点(此时已无可用节点) - 可加一层保险:
proxy_pass指向一个不存在的地址(如http://127.0.0.1:1),配合error_page 502 = @offline统一接管
4. 验证与快速回切
停机生效后,建议验证:
- 用
curl -I http://your-domain/确认返回 503 及正确 body - 检查
access_log是否不再出现 upstream 连接记录 - 确认
stub_status中 Active connections 正常,但没有 upstream 连接
恢复服务时,只需还原 upstream 中的 server 行(去掉 down),取消 return 或恢复 proxy_pass,再 reload 即可。整个过程秒级完成,不影响 Nginx 自身稳定性。


















