Nginx中backup节点启用需满足三条件:所有非backup节点被max_fails/fail_timeout动态标记为不可用、location中配置proxy_next_upstream触发重试、backup自身具备独立承载全量流量能力,缺一则导致502或超时。

明确 backup 节点的启用逻辑
backup 节点默认完全不参与任何请求分发,只有当 所有非 backup 节点都被 Nginx 标记为不可用 后,才会被选中。这个“标记”不是靠人工开关,而是由失败行为动态触发:
- 每个 server 必须配置
max_fails和fail_timeout,例如max_fails=3 fail_timeout=30s - Nginx 只在请求发生
connect refused、timeout,或收到proxy_next_upstream显式声明的错误码(如 502/503/504)时,才计一次失败 - 连续失败达到
max_fails次后,该节点被临时摘除,在fail_timeout秒内不再接收新请求
必须配合 proxy_next_upstream 才能触发重试与切换
仅定义 upstream 不够,location 块里必须启用重试机制,否则单次失败就直接返回错误,根本不会走到 backup:
- 设置
proxy_next_upstream error timeout http_500 http_502 http_503 http_504,让常见异常都触发换节点 - 用
proxy_next_upstream_tries 3限制最多尝试 3 个后端(含重试),避免雪崩式转发 - 搭配
proxy_next_upstream_timeout 15s控制整条重试链路总耗时
backup 节点自身也要具备独立服务能力
backup 不是“摆设”,它得能独自承接全部流量。否则切过去照样崩:
- 同样要配
max_fails和fail_timeout,防止它自己出问题还持续被选中 - 建议单独部署健康探活接口(如
/health?site=dr),避免和主业务共用路径导致误判 - 若 backup 是冷备中心,建议常态化小流量验证(比如通过调整 weight=1 临时导流 1%),确保链路通畅
增强容灾的实用补充项
光靠 backup 还不够稳健,加上这几项可显著提升灾难应对能力:
-
error_page 接口级降级:当 backup 也失败时,用
error_page 502 503 504 = @degrade返回预设 JSON 或跳转静态页,保障用户有感知、不白屏 - 跨中心权重差异化:若有多机房,可给主中心高 weight(如 10)、灾备中心低 weight(如 3),既日常分担压力,又避免灾备节点过载
-
可观测性确认生效:停掉全部主节点后,检查 Nginx error log 是否出现
upstream server temporarily disabled,并确认 access log 流量已打到 backup IP


















