nginx代理实现后端冗余备份需在upstream中用backup标记备用服务器,主服务器故障时自动启用backup节点,配合max_fails和fail_timeout实现健康检查与故障转移。

配置 Nginx 代理支持后端服务器冗余备份,核心是利用 upstream 模块的健康检查与故障转移机制,而非简单轮询。关键不在于“多配几台”,而在于明确主备角色、设置合理探活参数,并确保备用节点只在真正需要时启用。
定义带 backup 标识的后端集群
在 http 块中声明 upstream,用 backup 参数标记备用服务器:
upstream app_backend {
server 192.168.1.10:8080 weight=3 max_fails=2 fail_timeout=30s;
server 192.168.1.11:8080 weight=1 backup;
}
说明:
– 非 backup 服务器(如 192.168.1.10)正常接收流量;
– backup 服务器(如 192.168.1.11)默认不参与负载,仅当所有非 backup 服务器被标记为不可用时才启用;
– max_fails 和 fail_timeout 共同构成健康检查逻辑:连续失败 2 次,30 秒内不再转发请求到该节点。
在 server 块中正确引用 upstream
location 中使用 proxy_pass 指向 upstream 名称,不要加尾部斜杠(除非后端路径需重写):
server {
listen 80;
server_name example.com;
<pre class="brush:php;toolbar:false;">location / {
proxy_pass http://app_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 5s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}}
注意:
– 不要写成 proxy_pass http://app_backend/;(末尾斜杠会触发 URI 重写,可能破坏路径);
– 超时参数建议显式设置,避免默认值过长导致用户等待或连接堆积。
验证与观察故障切换行为
配置完成后需实际验证容灾逻辑是否生效:
- 手动停掉主服务器(如
systemctl stop nginx或关机),持续访问服务,确认响应仍正常; - 查看 Nginx 错误日志(
/var/log/nginx/error.log),应出现类似no live upstreams while connecting to upstream的提示后迅速恢复,表明 backup 已接管; - 重启主服务器,等待约 30 秒(
fail_timeout时间),Nginx 会自动将其重新纳入可用池,流量逐步回归。
进阶:多个 backup 或分层容灾
可配置多个 backup 服务器,它们之间按权重或轮询分担备用流量:
upstream app_backend {
server 192.168.1.10:8080; # 主
server 192.168.1.11:8080 backup; # 备1
server 192.168.1.12:8080 backup; # 备2,与备1共同承担故障流量
}
若需更严格的主备控制(如仅允许一台 backup 启用),可配合 ip_hash 或外部健康检查脚本实现,但基础场景下原生 backup 已足够可靠。











