Nginx 官方不支持 check 健康检查,需手动编译第三方模块 nginx_upstream_check_module;启用后在 upstream 块中配置 check 指令及 check_http_send、check_http_expect_alive 等参数,并通过 location /status 配合 check_status 指令查看状态。

Nginx 官方版本不自带 check 健康检查指令,你看到的 check、check_http_send、check_http_expect_alive 等配置,均来自第三方模块:nginx_upstream_check_module。它需手动编译进 Nginx 才能使用。
如何启用 upstream check 功能
该模块不是默认内置的,必须在编译 Nginx 时显式添加:
- 下载对应 Nginx 版本的 nginx_upstream_check_module 源码
- 重新编译 Nginx,加入
--add-module=/path/to/nginx_upstream_check_module - 确认编译成功后,可通过
nginx -V 2>&1 | grep -o with-http_upstream_check_module验证
upstream 中使用 check 的基本写法
启用后,在 upstream 块中添加 check 指令即可开启主动健康检查:
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
<pre class="brush:php;toolbar:false;">check interval=3 rise=2 fall=5 timeout=1;
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=5:连续 5 次失败则标记为 down -
timeout=1:每次检查超时时间为 1 秒 -
check_http_send发送自定义请求(建议用 HEAD 减少开销) -
check_http_expect_alive指定哪些状态码表示“存活”
查看健康检查状态(需搭配 status 模块)
仅启用 check 不会暴露状态页,还需启用配套的 check_status 指令(同属该模块):
location /status {
check_status;
# 可选:限制访问权限
# allow 127.0.0.1;
# deny all;
}访问 http://your-nginx-ip/status 即可看到各后端节点的当前状态、检查次数、失败次数等实时信息。
注意事项与常见问题
使用该模块时需注意:
- 不兼容 Nginx 官方流控或某些商业版(如 Tengine 的 check 实现略有差异)
- check 请求默认不携带 Host 头,若后端依赖 Host 路由,需在
check_http_send中手动添加,例如:"HEAD /health HTTP/1.0\r\nHost: example.com\r\n\r\n" - 确保后端服务的
/health接口轻量、快速、稳定,避免因检查拖慢整体响应 - 该模块只支持 passive + active 混合检测,但不提供自动摘除后自动恢复的“熔断”策略(需靠 rise/fall 控制)
不复杂但容易忽略:编译集成是前提,配置语法要匹配模块版本,状态页要单独开放 location。用对了,能显著提升集群可用性感知能力。

















