开源nginx原生仅支持被动健康检查,依赖真实请求失败触发:在fail_timeout时间窗口内累计失败max_fails次即标记节点不可用并跳过fail_timeout秒,到期后以首个请求试探恢复;必须配合proxy_next_upstream显式配置错误判定条件才能生效。

开源 Nginx 原生只支持被动健康检查,无需额外模块或编译,靠真实业务请求的失败反馈来标记后端异常。它简单可靠,适合大多数生产场景。
被动监测的核心参数
关键就两个指令,写在 upstream 的每个 server 行后面:
- max_fails:连续失败多少次,就判定该后端不可用。默认是 1,设为 0 则禁用检查
- fail_timeout:被标记为不可用后,停用时长(秒)。超时后 Nginx 会发一个试探请求,成功即恢复服务
配置示例与说明
以下配置中,不同后端可设置不同策略:
upstream app_backend {
server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.11:8080 max_fails=2 fail_timeout=20s;
server 192.168.1.12:8080 max_fails=1 fail_timeout=10s; # 使用默认值
}
说明:
- 第一台服务器需连续失败 3 次才下线,下线期为 30 秒
- 第二台更敏感,2 次失败即下线,20 秒后重试
- 第三台沿用默认(max_fails=1, fail_timeout=10s),一次失败就停用 10 秒
什么算“失败”?
Nginx 在代理过程中遇到以下任一情况,即计为一次失败:
- 连接被拒(Connection refused)
- 连接超时(timeout)
- 收到空响应(no response)
- 返回 proxy_next_upstream 指令中定义的错误状态码(如 502、503、504)
注意:它不主动发探测请求,所有判断都基于真实用户请求链路,因此首次发现故障会有一定延迟,且部分用户请求可能成为“探针”。
配合 proxy_next_upstream 提升容错
在 location 块中建议显式配置重试逻辑:
location / {
proxy_pass http://app_backend;
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 3;
proxy_next_upstream_timeout 10s;
}
这样当某次请求失败时,Nginx 会在超时或收到指定错误码时自动尝试下一个后端,提升整体可用性。











