要让nginx支持upstream_check健康检查模块,必须手动编译集成;配置分三步:安装模块(需匹配nginx版本并打补丁)、在upstream块中启用check指令(含http探测参数)、配置/status位置暴露监控页并限制访问。

要让 Nginx 支持 upstream_check 健康检查模块,必须手动编译集成,因为开源版 Nginx 默认不包含该功能。配置过程分三步:模块安装、upstream 块启用 check 指令、暴露状态页监控。
手动编译安装 upstream_check 模块
该模块由淘宝系维护(GitHub 仓库),需与当前 Nginx 版本严格匹配:
- 下载对应 Nginx 源码(如
nginx-1.28.0)和模块源码(推荐 v0.4.0) - 用 patch 工具打补丁,例如:
patch -p1 - configure 时添加模块路径:
--add-module=/path/to/nginx_upstream_check_module-0.4.0,其他参数建议复用原安装配置(可通过nginx -V查看) - 执行
make && make install,完成后运行nginx -V | grep check确认模块已加载
在 upstream 中启用主动健康检查
check 指令写在 upstream 块内,对整个组生效,不是单个 server 行:
-
check interval=3 rise=2 fall=3 timeout=1 type=http;每 3 秒探测一次;连续 2 次成功才恢复上线;连续 3 次失败才下线;单次超时 1 秒 - HTTP 类型下必须配
check_http_send发送真实业务请求,例如:check_http_send "GET /health HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n"; - 用
check_http_expect_alive http_2xx;定义健康响应码,必要时配合后端返回 JSON 内容做更细粒度判断 - 建议显式加
default_down on;,防止 Nginx 启动时把未就绪节点误判为健康
配置 status 页面用于监控与排查
通过专用 location 暴露实时节点状态,便于人工查看或 Prometheus 采集:
- 添加如下配置:
location /status {<br> check_status;<br> access_log off;<br> allow 127.0.0.1;<br> deny all;<br>} - 访问
/status可看到每个后端的 IP、端口、当前状态(up/down)、失败次数、最近检测时间等 - 务必限制访问来源,避免敏感信息泄露;生产环境建议结合内网监控系统白名单放行
搭配 proxy_next_upstream 做兜底容错,能进一步提升健壮性——主动检查再准也有盲区,真实请求失败时仍可自动切走。











