nginx plus通过health_check指令提供主动健康检查,需在location中配置并配合proxy_pass指向upstream,支持自定义间隔、阈值、uri及match规则匹配响应状态、头或体内容。

Nginx Plus(商业版)通过 health_check 指令提供主动式健康检查能力,可定期探测上游服务器状态,并自动剔除或恢复节点。它不适用于开源版 Nginx,仅在 Plus 许可下可用。
启用 health_check 的基本配置
健康检查必须定义在 location 块中,且该 location 通常用于反向代理到 upstream 组。检查本身不处理用户请求,而是由 Nginx Plus 主动发起探测。
- 需配合
proxy_pass指向一个已定义的upstream块 -
health_check可单独使用(采用默认参数),也可带参数定制频率、失败阈值、校验逻辑等 - 示例最简配置:
upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; } server { location / { proxy_pass http://backend; } location /health { health_check; proxy_pass http://backend; } }
自定义检查行为的关键参数
默认情况下,health_check 每 5 秒对每个 upstream 成员发送一次 GET / 请求,期望返回 2xx 或 3xx 状态码。可通过以下参数调整:
- interval=10:将探测间隔改为 10 秒
- fails=3:连续 3 次失败才标记为不健康
- passes=2:连续 2 次成功才恢复为健康
- uri=/api/health:指定探测路径(如后端专用健康接口)
-
match=status_ok:配合自定义
match块,支持响应头、状态码、响应体内容匹配
使用 match 定义高级匹配规则
当需要校验响应头、JSON 字段或 HTTP 状态以外的内容时,需先定义 match 块,再在 health_check 中引用:
- 例如要求响应状态码为 200 且包含
Content-Type: application/json头:match status_ok { status 200; header Content-Type = "application/json"; } upstream backend { server 192.168.1.10:8080; health_check match=status_ok interval=5 fails=2 passes=2; } -
match还支持body ~ "healthy"(正则匹配响应体)、header X-Status !~ "down"等语法
查看健康状态与调试技巧
Nginx Plus 提供内置的实时状态页面(需启用 status 模块):
- 在 server 块中添加
location /status { status; },访问/status即可看到各 upstream 成员的健康状态、请求计数、失败次数等 - 日志中可通过
$upstream_addr和$upstream_state变量记录转发目标及结果(如 “live”、“unhealthy”) - 若检查始终失败,检查后端是否真实响应、防火墙是否放行探测请求、URI 路径是否存在、响应是否含预期头或内容











