nginx开源版需借助nginx_upstream_check_module等第三方模块实现主动健康检查,nginx plus则原生支持;也可采用proxy_next_upstream配合被动检查与外部脚本实现零侵入方案。

Nginx 本身不直接提供“心跳检测”机制,但可以通过 主动健康检查(active health check) 实现对后端节点的周期性探活,模拟心跳效果。核心方式是利用 nginx-plus 的商业功能,或在开源版 Nginx 中借助第三方模块(如 nginx_upstream_check_module)或反向代理层外的辅助方案。
使用 nginx_upstream_check_module(开源推荐方案)
这是最常用、轻量且兼容主流开源 Nginx 版本(需自行编译)的方案,支持 TCP/HTTP 层探测,可配置失败重试、恢复判断等逻辑:
- 下载并编译该模块(如适配你当前 Nginx 版本),启用
--add-module=... - 在
upstream块中添加检查指令,例如:
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
check interval=3 rise=2 fall=3 timeout=1 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
说明:
– interval=3:每 3 秒探测一次
– rise=2:连续 2 次成功则标记为 up
– fall=3:连续 3 次失败则标记为 down
– /health 需由后端服务暴露一个轻量、无副作用的健康接口(返回 200 即可)
使用 Nginx Plus(官方商业版)
无需额外编译,原生支持高级健康检查:
- 配置简单,支持 HTTP/TCP/UDP、自定义请求头、状态码匹配、SSL 握手检测等
- 示例配置:
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
health_check interval=5 fails=3 passes=2;
health_check_uri=/health;
health_check_http_2xx;
}
Plus 还提供实时状态页(/status)、自动剔除+自动恢复、权重动态调整等能力,适合生产级高可用场景。
替代方案:应用层 + Nginx 被动检查(零侵入)
若无法编译或升级 Nginx,可用“被动健康检查”配合外部心跳管理:
- 启用
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;,让失败请求自动转发到其他节点 - 结合
max_fails=3 fail_timeout=30s;,Nginx 自动将异常节点临时摘除(30 秒内最多失败 3 次即标记不可用) - 再搭配外部脚本(如 cron + curl)定期调用后端
/health,发现宕机时调用 Nginx API 或 reload 配置实现主动剔除
关键注意事项
- 健康接口必须轻量、稳定、无业务副作用,避免 /metrics 或 /actuator/info 等可能触发初始化或耗时操作的路径
- 探测路径建议独立部署(如 Nginx 内部 location 或后端专用 endpoint),不要复用主业务入口
- 注意防火墙、安全组是否放行探测端口与路径;HTTPS 后端需确认证书有效性(尤其自签名)
- 避免探测频率过高导致后端压力,一般 3–10 秒间隔较合理;超时时间建议 ≤ 探测间隔的 1/2











