Nginx反向代理后端健康检查故障转移配置 Nginx
前言
多台后端服务做负载均衡时,某台宕机不能继续把请求发过去。Nginx upstream 可以配置备用服务器和失败计数,自动剔除故障节点、恢复后再纳入。注意 Nginx 原生被动健康检查的局限,本文讲解 upstream 负载、max_fails/fail_timeout、backup 备用节点、与主动检查方案区别。
操作步骤
1. 定义 upstream 多节点
upstream backend {
server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8082 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8083 backup;
}
2. 反向代理引用
server {
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 参数说明
- max_fails:连续失败次数阈值;fail_timeout:判定故障的时间窗。
- backup:备用节点,主节点全挂才启用。
4. 配置健康检查响应超时
proxy_connect_timeout 5s;
proxy_read_timeout 15s;
5. 校验并重载
nginx -t
nginx -s reload
6. 验证故障转移
停掉一台后端,观察请求是否落到其余节点。
常见坑
- 原生 upstream 是被动检查,只在请求失败时计数,不会主动探活。
- fail_timeout 过后不会自动探测恢复,要等新请求触发。
- backup 节点平时不接收流量,只在主节点全挂时顶上。
- 健康检查需要主动探测时要用商业版或第三方模块。
- 后端返回 5xx 才计失败,正常响应不计。
- 多 worker 计数各自独立,故障判定可能不一致。
- 会话粘滞需求需额外配置 ip_hash,别和故障转移混淆。
总结
Nginx 被动故障转移靠 max_fails/fail_timeout 计数失败,backup 兜底。它简单够用但不主动探活,强需求用主动健康检查模块或负载均衡器。配置后停节点实测故障转移,确认请求落到健康后端。
遇到问题加QQ23979811 协助处理