要通过 upstream_check 模块监控后端服务存活,需先确认 nginx 已编译并启用该模块(通常来自 nginx_upstream_check_module),再在 upstream 块中配置健康检查参数;该模块非官方内置,需手动编译或使用 tengine 等集成版本,验证命令为 nginx -v 2>&1 | grep -o 'upstream_check';配置时用 check 指令设定 interval、rise、fall、timeout 及 type,并可配合 check_http_send 和 check_http_expect_alive 实现 http 探测;可通过 location /status { check_status; } 暴露状态页,支持 html 与 json 格式;注意事项包括:后端需提供稳定健康接口,check_http_send 内容须符合 http 协议,https 后端需改用 tcp 模式,且模块仅影响节点调度状态而非负载均衡逻辑。

要通过 upstream_check 模块监控后端服务存活,需先确认 Nginx 已编译并启用该模块(通常来自 nginx_upstream_check_module),再在 upstream 块中配置健康检查参数。
确认模块已加载
该模块非 Nginx 官方内置,需手动编译或使用已集成该模块的发行版(如 Tengine)。验证方式:
- 执行
nginx -V 2>&1 | grep -o 'upstream_check',有输出表示已编译支持 - 若无输出,需重新编译 Nginx 并添加
--add-module=/path/to/nginx_upstream_check_module - 注意:OpenResty 默认不包含此模块,也不能通过动态模块方式加载(它不支持
load_module)
配置 upstream 健康检查
在 upstream 块中启用检查,并设置探测方式与阈值:
- 使用
check指令开启检查,例如:check interval=3 rise=2 fall=3 timeout=1 type=http -
interval:探测间隔(秒);rise:连续成功几次标记为 up;fall:连续失败几次标记为 down -
type=http表示发送 HTTP 请求探测,此时可配合check_http_send和check_http_expect_alive精确控制 - 示例:
upstream backend {<br> server 192.168.1.10:8080;<br> server 192.168.1.11:8080;<br> check interval=3 rise=2 fall=3 timeout=1 type=http;<br> check_http_send "HEAD /health HTTP/1.0\r\n\r\n";<br> check_http_expect_alive http_2xx http_3xx;<br>}
暴露检查状态页面(可选但实用)
启用内置状态页便于人工或脚本查看后端健康状况:
- 在
server块中添加 location,如:location /status { check_status; } - 访问
http://your-nginx/status可看到表格形式的状态,含 IP、端口、状态(up/down)、失败次数、检测时间等 - 支持 JSON 输出(加
format=json参数),方便监控系统集成 - 建议加访问控制,例如用
allow/deny限制仅内网或指定 IP 访问
注意事项与常见问题
实际使用中需留意几个关键点:
- 后端应用需提供轻量、稳定的健康接口(如
/health),避免返回 5xx 或超时导致误判 -
check_http_send发送的内容必须符合 HTTP 协议格式,结尾空行不可省略 - 若后端是 HTTPS 服务,
upstream_check不支持 SSL 探测,只能走 HTTP 健康接口或改用 TCP 模式(type=tcp) - 该模块不修改负载均衡逻辑本身,仅影响服务器是否参与调度;标记为 down 的节点会被临时剔除,恢复后自动加入











