Nginx 启用 stub_status 模块可轻量获取实时连接与请求指标,需确认模块已编译启用、在 server 块中配置 location 路由并限制访问权限,解析输出可得活跃连接数、QPS、连接复用率等关键监控数据。

在 Nginx 中启用 stub_status 模块,是获取实时连接与请求指标最轻量、最直接的方式。它不依赖外部工具或代理,只需简单配置即可暴露基础但关键的运行时数据:当前活跃连接数、已接受/处理/请求数、读写等待状态等。
确认模块已编译并启用
Nginx 默认编译时通常已包含 http_stub_status_module,但需验证是否启用:
- 执行
nginx -V 2>&1 | grep -o with-http_stub_status_module,若输出该字符串,说明模块可用; - 若无输出,需重新编译 Nginx 并添加
--with-http_stub_status_module参数; - 注意:该模块仅支持 HTTP(非 Stream)上下文,只能在
http或server块中配置。
配置 stub_status 路由
在某个 server 块内添加 location,例如暴露为 /nginx-status:
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1; # 仅允许本地访问
allow 10.0.0.0/8; # 可选:允许内网监控节点
deny all;
}重启或重载 Nginx(nginx -s reload)后,访问 http://your-nginx-server/nginx-status 即可看到类似输出:
Active connections: 3 server accepts handled request 12345 12345 23456 Reading: 0 Writing: 1 Waiting: 2
其中:
Active connections 是当前所有 TCP 连接数(包括 waiting、reading、writing);
accepts 是 Nginx 启动以来接受的总连接数;
handled 是成功处理的连接数(通常等于 accepts);
request 是总 HTTP 请求次数(一个连接可发起多个请求);
Reading 表示正在读取请求头的连接数;
Writing 表示正向客户端发送响应的连接数;
Waiting 表示空闲 keep-alive 连接数(即已处理完请求、等待新请求的连接)。
解析关键监控指标
仅看单次输出意义有限,需结合时间维度计算速率:
- 当前活跃连接数 = Active connections 的值,反映瞬时负载压力;
-
请求吞吐率(QPS) ≈
(当前 request 数 − 上次 request 数) ÷ 采样间隔(秒); - 连接复用率 = request / handled,值越大说明 keep-alive 利用越充分;
- 若
accepts ≠ handled,可能表示连接被异常中断(如超时、reset),需关注 error log。
配合脚本或监控系统采集
可通过 curl 定期抓取并解析:
curl -s http://127.0.0.1/nginx-status | awk '
/Active connections/ { conn=$3 }
/^[0-9]+ [0-9]+ [0-9]+$/ { req=$3 }
END { print "connections:", conn, "requests:", req }'再将结果推送至 Prometheus(用 nginx-exporter 更推荐)、Zabbix 或自建时序数据库。注意避免高频轮询(如 ≤ 10s 一次),防止自身成为压力源。
不复杂但容易忽略:务必限制 stub_status 的访问权限,禁止公网暴露;同时确保 Nginx 配置中未开启 server_tokens off 外的其他敏感信息泄露风险。


















