Nginx原生不支持健康检查接口,需编译第三方模块nginx_upstream_check_module并配置check指令和location /upstream_status { healthcheck_status; }才能启用该路径;缺模块、缺配置或未重载均导致404。

开源 Nginx 本身不提供健康检查接口,必须依赖第三方模块(如 nginx_upstream_check_module)才能暴露 /upstream_status 这类可被脚本调用的状态页。
为什么 curl http://localhost/upstream_status 返回 404
因为原生 Nginx 没有 check_status 指令,也不存在该路径——它只在你成功编译并启用 nginx_upstream_check_module 后才生效。没装模块、没配 location、没 reload,三者缺一都会 404。
- 确认模块已加载:
nginx -V 2>&1 | grep -o "nginx_upstream_check_module",无输出说明未编译进去 - 确认配置里有对应
location块,且不在server外层游离 - 确认 Nginx 已
nginx -s reload,不是仅改了配置就完事
怎么配出可用的 /upstream_status 接口
这个路径不是默认开启的,必须手动声明一个 location 并启用 healthcheck_status 指令。它和 upstream 块里的 check 指令是配套关系,单独写 location 不生效。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 确保 upstream 块中已启用
check,例如:check interval=3000 rise=2 fall=5 timeout=1000 type=http; - 在某个
server块内添加:location /upstream_status { healthcheck_status; } - 推荐加访问控制,比如只允许内网:
allow 192.168.0.0/16; deny all; - 不要用
proxy_pass转发到其他服务去“模拟”这个接口——它必须由模块原生支持
curl 获取状态后怎么解析出 UP/DOWN
返回的是 HTML 表格,不是 JSON,直接用 grep + awk 提取字段最稳,别试图用 jq 解析。
- 典型响应片段:
<td>192.168.1.10:8080</td><td>UP</td><td>5</td><td>0</td> - 提取 IP 和状态:
curl -s http://localhost/upstream_status | grep "<td>" | awk -F'[<>]' '{if(NR%2==1) ip=$3; else if($3=="UP"||$3=="DOWN") print ip, $3}' - 注意:HTML 中
UP和DOWN是全大写,大小写敏感;default_down=true时新节点启动即为DOWN,别误判为故障
真正容易被忽略的是:这个接口返回的 RISE 和 FALL 计数器是滚动累计值,不是当前连续成功/失败次数——它反映的是模块内部状态机的历史计数,不能直接用来做告警阈值判断。

















