TCP层主动健康检查是Nginx通过三次握手探测后端端口连通性,不发应用层数据,需编译upstream_check_module,配置type=tcp、interval、fall、rise、timeout等参数,并通过/status路径监控状态。

什么是 TCP 层主动健康检查
TCP 层主动健康检查是指 Nginx 定期尝试与后端服务器建立 TCP 连接,不发送任何应用层数据,仅靠三次握手是否成功来判断服务端口是否可达、进程是否监听。它比 HTTP 检查更轻量,适合无 HTTP 服务但需保障端口存活的场景(如数据库、消息队列、自定义 TCP 服务)。
启用 upstream_check_module 的 TCP 检查
开源 Nginx 默认不支持该功能,必须编译安装 nginx_upstream_check_module 模块。确认已加载后,在 upstream 块中配置如下:
- type=tcp:指定使用纯 TCP 连接探测
- interval:探测间隔(毫秒),建议设为 2000–5000,避免高频扫描
- fall:连续失败 n 次才标记为 down,推荐 3–5,防偶发抖动误判
- rise:连续成功 n 次才恢复为 up,推荐 2,兼顾稳定性与恢复速度
- timeout:单次连接超时(毫秒),一般设为 1000–3000,避免阻塞探测线程
-
default_down:可选设为
true,确保启动时先探再用,避免初始流量打到未就绪节点
示例配置:
upstream db_cluster {
server 192.168.5.10:3306 weight=1;
server 192.168.5.11:3306 weight=1;
check interval=3000 rise=2 fall=3 timeout=1500 type=tcp default_down=true;
}
验证与可观测性
模块提供内置状态页 /status,需在 server 块中显式暴露:
location /status {
check_status;
access_log off;
allow 127.0.0.1;
deny all;
}
访问该路径可看到各节点当前状态(up/down)、已检查次数、最近一次结果时间戳等,便于快速定位 TCP 连通性问题。
注意事项与调优建议
TCP 检查虽快,但有其局限性:
- 只确认端口监听和网络可达,无法反映服务内部负载、连接池耗尽或协议握手失败等问题
- 若后端启用了连接限制(如 iptables connlimit 或应用层限连),高频探测可能被拒绝,需同步调整限流阈值
- 避免将
interval设得过短(如 - 生产环境建议搭配
backup节点或 failover 策略,确保主节点全 down 时仍有兜底能力











