Nginx原生仅支持被动健康检查,需通过第三方模块(如nginx_upstream_check_module)实现主动探测;被动检查依赖proxy_next_upstream在请求失败时标记节点,主动检查则定时发送探针并实时监控状态。

被动健康检查(无需额外模块)
这是 Nginx 原生支持的方式,依赖请求失败后的自动标记与恢复机制,不发独立探针,而是“在真实请求中观察异常”。核心参数在 upstream server 中配置:
- max_fails:连续失败次数阈值,默认为 1。超过即标记该节点为不可用
- fail_timeout:标记为不可用后的冷却时间,默认 10 秒。期间所有新请求跳过该节点
- 失败判定依据是 proxy_pass 转发时的连接超时、5xx 错误或响应超时(需配合
proxy_next_upstream)
示例配置:
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 backup;
}
server {
location / {
proxy_pass http://app_backend;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 3;
proxy_next_upstream_timeout 10s;
}
}
注意:proxy_next_upstream 必须显式启用,否则即使后端返回 502,Nginx 也不会尝试下一个节点。
主动健康检查(需编译第三方模块)
要真正实现定时心跳探测(如每 3 秒发一次 HTTP HEAD 请求),必须引入nginx_upstream_check_module(由淘宝系维护,广泛用于 Tengine 和社区定制版 Nginx)。
关键配置项在 upstream 块内:
- check interval=3000:每 3000 毫秒探测一次
- rise=2 fall=5:连续 2 次成功则恢复为 up;连续 5 次失败则标记为 down
- timeout=1000:单次探测等待响应超时为 1 秒
-
type=http:支持 tcp / http / ssl_hello / mysql 等类型;HTTP 类型下可加
check_http_send和check_http_expect_alive
完整示例:
upstream api_cluster {
server 10.0.1.100:8000;
server 10.0.1.101:8000;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD /health HTTP/1.1\r\nHost: api.example.com\r\n\r\n";
check_http_expect_alive http_2xx;
}
location /status {
check_status;
access_log off;
}
访问 /status 可查看各节点当前状态(up/down)、失败次数、检查间隔等实时信息。
健康检查类型与适用场景
不同探测方式适用于不同后端协议和服务特征:
- tcp:最轻量,仅建立 TCP 连接,适合无 HTTP 接口的服务(如 Redis、MQTT)
-
http:发送自定义 HTTP 请求,推荐搭配
/health或/actuator/health端点,能反映应用层逻辑健康 - ssl_hello:验证 TLS 握手能力,适合 HTTPS 服务前置检测
- mysql:专用于 MySQL 实例连通性探测(需模块支持)
不建议对所有后端统一用 type=tcp —— 它无法识别应用进程已启动但业务逻辑卡死的情况。
注意事项与常见问题
主动检查虽强,但需注意:
- 模块需重新编译 Nginx,标准发行版(如 Ubuntu apt 安装的 nginx)默认不含该模块
- 探测路径应为轻量、无副作用的接口(避免触发写操作或日志刷盘)
- 多个 upstream 共享同一组后端时,
check配置需放在每个 upstream 内,不能全局复用 - 若后端启用了 IP 白名单,需确保 Nginx 本机 IP 在允许列表中
- 高并发场景下,过于频繁的探测(如 interval
被动检查足够应对大多数 Web 应用故障,主动检查更适合对 SLA 要求严苛、需快速隔离故障节点的场景。两者不是互斥关系,可以并存——被动机制兜底,主动机制提速收敛。


















