Nginx支持后端节点故障恢复后的自动重入调度,需正确配置被动或主动健康检查:被动检查依赖max_fails/fail_timeout与proxy_next_upstream触发试探请求;主动检查需nginx_upstream_check_module实现周期探活,并配合后端就绪接口与网络放行。
Nginx 默认支持后端节点故障恢复后的自动重新纳入调度,但必须正确配置健康检查参数,否则节点可能长期“离线”不被重试。关键在于让 Nginx 明确知道:什么时候算“已恢复”,以及“多久后重试”。
这是开源 Nginx 原生能力,无需额外模块,依赖 proxy_next_upstream 和 upstream 中的 max_fails/fail_timeout:
max_fails=3 fail_timeout=30s(示例值),表示连续失败 3 次后,该节点在 30 秒内不参与调度proxy_next_upstream error timeout http_500 http_502 http_503 http_504,确保失败能触发切换使用 nginx_upstream_check_module(常见于 OpenResty 或手动编译版本),可实现真正意义上的周期性健康探测:
check 指令,例如:check interval=3 rise=2 fall=5 type=http
check_http_expect_alive http_2xx http_3xx,只认 2xx/3xx 为健康,排除临时 503 等响应default_down=true,防止 Nginx 启动时把未就绪节点当健康节点用仅靠 Nginx 配置还不够,后端应用要提供真实反映运行状态的接口:
/ready 或 /actuator/health,不走业务链路只要参数配对、探测路径可达、后端响应可信,Nginx 就能在几秒到几十秒内完成“故障剔除 → 恢复探测 → 自动重入”的闭环。