在 linux 中配置 nginx 故障转移,需要在 upstream 模块中使用 backup 参数标记备用服务器。当所有非备用服务器都不可用时,nginx 会自动将请求转发给带有 backup 标记的服务器。默认情况下,nginx 使用轮询(round-robin)方式分发请求,只有主服务器全部宕机或达到最大失败次数时,才会启用备用服务器。

upstream 中 backup 参数的具体用法是什么
在 upstream 块中定义后端服务器列表时,只需在目标地址后添加 backup 关键字即可。该参数仅对负载均衡模式有效,若使用 ip_hash 等粘性会话策略,backup 依然生效,但需确保哈希一致性在故障切换时不会导致大量请求集中到备用节点。配置完成后,必须重载 Nginx 配置使更改生效。

worker_processes 1;
events {
worker_connections 1024;
}
http {
upstream backend_pool {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend_pool;
}
}
}
预期结果:当 192.168.1.10 和 192.168.1.11 均响应失败时,新请求将被路由至 192.168.1.12。若主服务器恢复,流量将自动切回主池,192.168.1.12 不再接收常规流量。
如何验证 backup 服务器是否真正接管流量
验证故障转移的关键在于模拟主服务器失效并观察日志或连接状态。可通过停止主服务器进程或使用防火墙规则阻断端口来触发故障转移。Nginx 默认的健康检查是被动式的,即只有在客户端请求到达时检测到错误才会标记服务器为不可用。因此,验证时需确保有持续的外部请求进入系统,否则备用服务器可能因无流量而未被激活。

# 在主服务器上执行,模拟服务宕机 sudo systemctl stop nginx # 或在防火墙上阻断端口 sudo iptables -A INPUT -p tcp --dport 8080 -j DROP # 在客户端持续发送请求 while true; do curl -s http://localhost/ > /dev/null && echo "OK" || echo "FAIL"; sleep 1; done
预期结果:在主服务器停止后,客户端请求开始返回错误或超时,随后 Nginx 将请求转发至 backup 服务器,客户端重新获得正常响应。查看 Nginx 错误日志可发现类似 upstream prematurely closed connection 的记录,确认主服务器已被剔除。
backup 服务器在主服务器恢复后是否会立即重新接收流量
是的,一旦主服务器恢复健康并成功处理请求,Nginx 会将其重新加入可用服务器池,并立即恢复轮询分发。此时 backup 服务器将退居二线,仅在主服务器再次失效时才被激活。这种机制确保了资源的高效利用,避免备用服务器长期处于空闲状态。需要注意的是,如果主服务器频繁波动,可能导致流量在主备之间反复切换,影响稳定性。











