max_fails与fail_timeout联动判定后端健康:在滑动时间窗口内累计失败次数,达阈值即摘除节点;需结合业务类型配置,并显式启用proxy_next_upstream错误码。
配置 Nginx 的
触发频率,本质是设定“多快判定后端不可用”,它不直接监控稳定性,而是通过失败行为反推节点健康状态。关键在于让触发节奏匹配真实业务波动,避免误判或响应迟钝。
理解 max_fails 与 fail_timeout 的联动逻辑
不是独立计数器,它必须和
配合使用才能生效。Nginx 在每个
时间窗口内累计失败次数,一旦达到
,节点即被临时摘除,且摘除时长也等于
。注意:这个窗口是滑动的——每次新失败都会重置窗口起始时间,失败计数不会因中间有成功请求而清零。
例如:
表示:若第 1 秒失败一次,第 8 秒又失败一次,两次落在同一 10 秒窗口内,则节点被标记为 down,持续 10 秒;第 12 秒首次新请求会尝试恢复连接
默认值(
)在高 QPS 场景下极易误触发,不建议直接使用
按业务特征设定触发节奏
没有统一最优值,需结合接口类型、响应耗时、错误容忍度来调整。目标是让触发时机略晚于偶发抖动,但早于持续性故障。
Nginx
在宝塔面板中轻松管理Nginx高性能Web服务器。提供可视化配置反向代理、负载均衡、SSL证书及HTTP缓存功能,一键优化高并发性能,助您高效搭建稳定、快速的网站运行环境。
下载
高敏感低流量接口
(如支付回调、风控校验):设
,单次超时或 502 即摘除,快速隔离风险;但必须搭配
,否则 HTTP 错误不计入失败
常规 Web API
(如用户查询、列表分页):推荐
,能覆盖多数网络抖动或瞬时 GC 延迟,又不至于频繁上下线
慢响应服务
(如报表导出、大文件生成):用
,防止单次 45 秒响应被连续误判为失败
确保失败判定条件真实反映业务异常
是否生效,取决于
的配置。Nginx 默认只将连接拒绝(connect refused)和连接超时(timeout)计入失败,HTTP 状态码(如 500/502/503)默认不参与计数。
必须显式启用对应状态码:
建议同时设置重试上限和总超时,避免无限重试拖垮整体延迟:
只有当这些错误发生并触发重试时,Nginx 才会将该次请求失败计入对应 upstream server 的 fails 计数器
高并发场景需放宽阈值防毛刺
QPS 万级以上的系统,天然存在少量失败(如网络丢包、短暂 GC STW)。若沿用
,节点可能在 1 分钟内反复进出 down 状态,造成请求毛刺。
通用做法:保持
(官方默认值),将
提高到 15–20
更精细的做法:基于压测数据设定——若某节点 10 秒内平均失败率约 4%,可设
;若常达 8%–10%,则调至 20 或更高
节点数越少,越要提高
,降低单点异常对整体可用性的影响
max_failsmax_failsfail_timeoutfail_timeoutmax_failsfail_timeoutmax_fails=2 fail_timeout=10smax_fails=1 fail_timeout=10smax_fails=1 fail_timeout=10sproxy_next_upstream timeout http_502max_fails=2–3 fail_timeout=30smax_fails=2 fail_timeout=60smax_failsproxy_next_upstreamproxy_next_upstream error timeout http_500 http_502 http_503 http_504;proxy_next_upstream_tries 3;proxy_next_upstream_timeout 10s;max_fails=3 fail_timeout=30sfail_timeout=10smax_failsmax_fails=15max_fails