«

Nginx反向代理后端健康检查故障转移配置

时间:2026-11-14 07:20     作者:emer     分类: 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. 参数说明

4. 配置健康检查响应超时

proxy_connect_timeout 5s;
proxy_read_timeout 15s;

5. 校验并重载

nginx -t
nginx -s reload

6. 验证故障转移

停掉一台后端,观察请求是否落到其余节点。

常见坑

  1. 原生 upstream 是被动检查,只在请求失败时计数,不会主动探活。
  2. fail_timeout 过后不会自动探测恢复,要等新请求触发。
  3. backup 节点平时不接收流量,只在主节点全挂时顶上。
  4. 健康检查需要主动探测时要用商业版或第三方模块。
  5. 后端返回 5xx 才计失败,正常响应不计。
  6. 多 worker 计数各自独立,故障判定可能不一致。
  7. 会话粘滞需求需额外配置 ip_hash,别和故障转移混淆。

总结

Nginx 被动故障转移靠 max_fails/fail_timeout 计数失败,backup 兜底。它简单够用但不主动探活,强需求用主动健康检查模块或负载均衡器。配置后停节点实测故障转移,确认请求落到健康后端。

遇到问题加QQ23979811 协助处理

标签: Nginx upstream 健康检查 故障转移