必须先编译启用--with-http_stub_status_module模块,再在server块内配置location并限制ip访问,否则无法获取active connections、accepts、handled、requests等纯文本指标。

直接在 Nginx 配置中启用 stub_status 模块就能采集基础运行指标,但必须满足三个前提:模块已编译支持、配置位置正确、访问严格受限。它不提供认证或 JSON 输出,只返回纯文本,所以安全和可用性全靠配置细节把控。
确认模块是否可用
该模块自 Nginx 0.7.1 起默认静态编译,但并非自动启用。执行以下命令验证:
-
nginx -V 2>&1 | grep -o with-http_stub_status_module—— 有输出说明已内置 - 若无输出,需重新编译并添加
--with-http_stub_status_module参数 - Ubuntu/Debian 官方包通常已包含;Alpine 等精简镜像可能裁掉,需特别检查
写对 location 配置位置与内容
必须放在 server 块内(不能在 http 外层或 upstream 中),推荐使用独立端口+本地监听提升安全性:
- 监听
127.0.0.1:8081或其他非公网端口,避免混入主服务流量 - 路径避开
/status等通用名,建议用/_nxs或/basic_status - 必须包含
stub_status;(Nginx 1.7.5+ 不再需要on) - 显式关闭日志:
access_log off;
强制限制访问来源
stub_status 不支持用户名密码认证,唯一防护手段是 IP 白名单:
- 只允许 Prometheus 采集机、本地监控脚本或运维跳板机访问
- 示例:
allow 127.0.0.1; allow 10.20.30.40; deny all; - 切勿开放
allow all或暴露到公网,否则连接数、请求量等敏感运行信息直接泄露
理解返回字段并用于监控
访问成功后返回三行纯文本,关键字段含义如下:
- Active connections:当前所有 TCP 连接总数(含 Reading / Writing / Waiting)
- accepts:Nginx 启动以来接受的总连接数
- handled:成功处理完毕的连接数(等于 accepts 说明无连接被丢弃)
- requests:处理过的 HTTP 请求总数(一个连接可发多个请求)
- Reading:正在读取请求头的连接数(过高可能客户端慢或攻击)
- Writing:正在发送响应的连接数(持续高值可能后端响应慢或网络拥塞)
- Waiting:keepalive 空闲连接数(非零说明启用了 keepalive,且客户端复用良好)











