Nginx Stub Status模块用于实时获取活跃连接与请求统计,需编译启用--with-http_stub_status_module(1.9.0+默认内置),配置location暴露接口并限制IP访问,返回Active connections、accepts、handled、requests等字段,仅支持IP限流且不可暴露公网。

Nginx 的 Stub Status 模块是一个轻量级内置模块,用于实时查看 Nginx 的基本连接和请求状态,包括当前并发连接数、已接受/处理/请求数等。它本身不提供高精度并发监控(如每秒新建连接、按 upstream 分组的并发),但能快速确认“此刻有多少活跃连接”,是排查高并发问题的第一步。
确认模块已启用并配置 location
Stub Status 不是默认开启的独立模块,而是编译时默认包含(1.9.0+ 版本无需额外编译参数),但需手动在配置中暴露一个 location 来启用。
在任意 server 块内添加如下配置(推荐放在 127.0.0.1 或内网地址,禁止公网暴露):
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1; # 仅允许本地访问
deny all; # 拒绝其他所有 IP
}保存后执行 nginx -t && nginx -s reload 重载配置。
理解返回字段含义(重点关注并发相关)
访问 http://127.0.0.1/nginx-status(或你配置的路径),会返回类似以下纯文本:
Active connections: 124 server accepts handled request 123456 123456 246912 Reading: 2 Writing: 8 Waiting: 114
其中关键字段解释:
- Active connections:当前所有活跃连接总数(即“并发连接数”),含正在读请求头、写响应、长连接空闲等待的连接
- Reading:Nginx 正在从客户端读取请求头的连接数(通常极小,>1 可能表示请求体大或客户端慢)
- Writing:Nginx 正在向客户端发送响应的连接数(反映后端响应快慢与网络吞吐)
- Waiting:处于 keep-alive 状态、空闲等待新请求的连接数(= Active − Reading − Writing)
用脚本或监控工具定期采集并发数据
Stub Status 是瞬时快照,需定时抓取才能观察趋势。例如用 curl + awk 提取 Active connections:
curl -s http://127.0.0.1/nginx-status | awk '/^Active/ {print $3}'可将该命令集成进:
- Zabbix:通过
system.runkey 或自定义脚本 item 采集 - Prometheus:配合 nginxlog exporter(日志方案)或用 lua-prometheus(更准,但需 Lua 支持)——Stub Status 本身无原生 Prometheus 格式
- 简单 Shell 脚本 + logrotate:每 10 秒记录一次,供事后分析峰值
注意局限性与常见误判
Stub Status 的并发值易被误解,需结合场景判断:
- 它统计的是 TCP 连接数,不是 HTTP 请求数(1 个连接可发多个请求)
- 启用了 keep-alive 时,
Waiting高是正常现象;若Active持续 > worker_connections 设置值,说明连接堆积,可能触发拒绝新连接 - 无法区分来自不同域名、URI 或 upstream 的并发,如需细粒度分析,应结合 access_log + 日志分析,或使用 OpenResty + Lua 埋点
- 如果返回 403/404,请检查 location 路径是否拼写正确、allow/deny 规则是否生效、是否在正确的 server 块中


















