要真正用好 stub_status 模块监控并发连接,必须兼顾安全暴露、稳定采集、准确解读三环节:启用时限制本地访问并关闭日志;通过脚本抓取转换为 Prometheus 格式供 node_exporter 收集;理解 Active/Reading/Writing/Waiting 等指标含义及多 worker 下的统计局限。

要真正用好 stub_status 模块监控并发连接,光配个 location /status { stub_status; } 是远远不够的。核心在于安全暴露、稳定采集、准确解读三个环节,缺一不可。
安全启用 stub_status 接口
生产环境绝不能让状态页暴露在公网或被随意访问:
- 用独立
server块监听本地回环端口(如listen 127.0.0.1:8081;),不复用主服务端口 - 路径避开常见命名,推荐用
/_nxs或/private/nginx_status,降低被扫描风险 - 强制关闭日志:
access_log off;,避免高频请求刷爆磁盘 - 只允许可信来源:
allow 127.0.0.1;+deny all;,禁止外部直连
稳定采集并发连接指标
stub_status 返回的是纯文本,Prometheus 无法直接解析,需轻量中转:
- 写一个定时脚本(如每 10 秒执行一次),用
curl -s http://127.0.0.1:8081/_nxs抓取原始数据 - 用
awk提取关键字段:Active connections、Reading、Writing、Waiting、accepts、handled、requests - 转成 Prometheus 格式,例如:
nginx_stub_active_connections 142,写入/var/lib/node_exporter/textfile/nginx.prom - 确保
node_exporter启动时已启用 textfile 收集器:--collector.textfile.directory=/var/lib/node_exporter/textfile
准确理解并发连接相关指标
“并发连接数”不是单一数字,而是由多个状态共同构成:
- Active connections:当前所有保持连接的总数,是总水位线
- Reading:正在读取请求头的连接,值高可能说明客户端发包慢或存在慢攻击
- Writing:正在向客户端发送响应的连接,值高可能后端响应慢或网络卡顿
-
Waiting:keep-alive 空闲连接,等于
Active − (Reading + Writing),正常场景应占比较高 - 注意:多 worker 进程下,stub_status 默认只统计当前 worker 数据;如需全局汇总,需确认是否启用
accept_mutex off或通过nginx -T查看实际生效配置
临时人工查看的安全方式
若需 Grafana 直连或运维人员临时访问,必须走反向代理加固:
- 新建一个仅内网可访问的
server,例如监听10.10.10.10:80 location /metrics { proxy_pass http://127.0.0.1:8081/_nxs; }- 加上 Basic Auth:
auth_basic "Nginx Status"; auth_basic_user_file /etc/nginx/.htpasswd; - 添加
proxy_hide_header Connection;和proxy_set_header Host $host;,防止响应头干扰











