源码安装 nginx 启用 stub_status 模块需在 configure 阶段显式添加 --with-http_stub_status_module 参数,编译后通过 nginx -v 验证;配置须置于 server 块内,监听本地端口并限制访问,返回纯文本监控数据。

源码安装 Nginx 时启用 stub_status 模块,关键在编译阶段显式加入参数,并在配置中安全暴露监控端点。它不默认开启,也不能靠运行时加载,必须一步到位。
确认并添加 --with-http_stub_status_module 编译参数
该模块是静态编译进 Nginx 的,configure 阶段必须指定:
- 执行
./configure --help | grep stub可确认参数名是否为--with-http_stub_status_module(标准写法,注意下划线和 module 后缀) - 典型完整命令示例:
./configure --prefix=/usr/local/nginx \<br> --user=nginx --group=nginx \<br> --with-http_ssl_module \<br> --with-http_stub_status_module
- 漏掉这个参数,后续任何配置都会报错
unknown directive "stub_status"
编译安装后验证模块是否生效
安装完成后立即检查,避免白忙一场:
- 运行
/usr/local/nginx/sbin/nginx -V 2>&1 | grep -o with-http_stub_status_module - 有输出即表示已成功编译启用;若无输出,说明 configure 时未加参数或编译过程出错
- 注意:Ubuntu/Debian 的
nginx-full包通常自带该模块,但源码安装必须自己加
在 server 块内配置 /nginx_status 路由
配置必须嵌套在某个 server{} 块中,不能放在 http 或全局层级:
- 推荐单独建一个仅监听本地的 server,例如:
server {<br> listen 127.0.0.1:8080;<br> location /nginx_status {<br> stub_status;<br> access_log off;<br> allow 127.0.0.1;<br> deny all;<br> }<br> } -
stub_status指令无需写on(stub_status on;是旧写法,新版本直接stub_status;即可) - 务必关闭 access_log 并限制 IP,防止敏感状态信息泄露
测试与使用纯文本输出
重载后即可获取原始指标,它是后续对接 Prometheus 等系统的起点:
- 执行
nginx -t && nginx -s reload - 本地测试:
curl http://127.0.0.1:8080/nginx_status - 返回类似:
Active connections: 3<br> server accepts handled requests<br> 15245 15245 28362<br> Reading: 0 Writing: 1 Waiting: 2
- 这些字段需用脚本或
nginx-prometheus-exporter解析成监控指标,stub_status 本身不提供 JSON 或 Prometheus 格式











