Nginx Plus主动健康检查需在location块中使用health_check指令并proxy_pass至upstream,支持自定义uri、interval、fails、passes及match块校验响应内容,配合status页面和日志调试。

配置 Nginx Plus 主动健康检查,核心是让 Nginx 定期向后端服务发起探测请求,并依据响应状态自动标记节点健康与否。它不依赖真实业务流量,能更早发现“假活”或响应缓慢的服务。
启用 health_check 指令并关联 upstream
主动检查必须在 location 块中使用 health_check 指令,并确保该 location 的 proxy_pass 指向已定义的 upstream 组:
- 在
http块中定义 upstream,例如:upstream my_api { server 127.0.0.1:8000; server 127.0.0.1:8001; } - 在
server块内添加 location:location /health-check { proxy_pass http://my_api; health_check; } - 默认行为:每 5 秒对每个 upstream 成员发送一次
GET /请求,仅接受 2xx–3xx 状态码
自定义探测路径、频率与判定逻辑
通过参数细化健康检查行为,适配实际服务接口:
-
uri="/api/health":指定探测端点,建议后端提供轻量、无副作用的健康接口 -
interval=3s:缩短探测间隔(最小支持 1 秒),加快故障识别速度 -
fails=3 passes=2:连续失败 3 次才下线,连续成功 2 次才恢复,避免抖动误判 -
match=healthy_response:配合match块可校验响应体内容或 header,例如要求返回{"status":"ok"}
配置 match 块实现精准响应验证
仅靠状态码不够可靠,用 match 可深入检查响应细节:
- 在
http块顶层定义:match healthy_response { status 200; header Content-Type ~ "application/json"; body ~ '"status":"ok"'; } - 在
health_check中引用:health_check match=healthy_response; - 这样即使返回 200,但 JSON 格式错误或字段异常,也会被判定为不健康
查看健康状态与调试要点
Nginx Plus 提供内置状态页面,便于实时观测:
- 添加 location 启用状态页:
location /status { stub_status; }或使用更详细的status模块(需启用) - 检查日志:开启
error_log /var/log/nginx/health.log notice;,失败探测会记录原因(超时、连接拒绝、状态码不符等) - 注意:探测请求默认不带 Host 头,如后端依赖 Host 路由,需显式添加:
proxy_set_header Host $host;在 health-check location 中


















