启用 stub_status 模块可实时获取 Nginx 连接状态,包括活跃连接数、接受/处理/请求总数及 reading/writing/waiting 分布;需确认模块已编译、在 server 块中配置受控访问路径,并解析响应字段用于监控告警。

直接启用 stub_status 模块就能获取 Nginx 当前的实时连接状态,包括活跃连接数、已接受/处理/请求总数,以及读(reading)、写(writing)、等待(waiting)三类连接的分布。它轻量、无需额外依赖,是运维排查高并发或连接堆积问题的第一手指标。
确认 stub_status 模块已编译进 Nginx
该模块默认不启用,但通常随 Nginx 源码一同编译(除非显式禁用)。验证方式:
- 执行
nginx -V 2>&1 | grep -o with-http_stub_status_module,输出含该字符串即支持 - 若无输出,需重新编译 Nginx 并添加
--with-http_stub_status_module
在 server 块中配置 stub_status 接口
不能放在 http 或 location 外层,必须嵌套在某个 server 块内(建议单独配一个仅监听本地的 server):
server {
listen 127.0.0.1:8080;
server_name localhost;
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
关键点:必须限制访问来源(如只允 localhost),避免敏感连接信息暴露;access_log off 减少日志开销;路径可自定义(如 /status),但需与后续采集一致。
解析返回内容:读懂每行含义
访问 http://127.0.0.1:8080/nginx-status(需 curl 或浏览器),典型响应如下:
Active connections: 12 server accepts handled requests 1562 1562 2487 Reading: 0 Writing: 4 Waiting: 8
- Active connections:当前所有活跃连接数(ESTABLISHED 状态)
- accepts:Nginx 启动以来接受的总连接数
- handled:成功处理的连接数(通常等于 accepts,不等说明有连接被丢弃)
- requests:客户端发起的 HTTP 请求总数(一个连接可发多个请求)
- Reading:正在读取客户端请求头的连接数(值高可能意味着请求体大或客户端慢)
- Writing:正向客户端发送响应的连接数(值高可能后端响应慢或网络卡)
- Waiting:空闲等待新请求的 keep-alive 连接数(正常情况应占 Active 的大部分)
集成到监控系统(以 Prometheus 为例)
原生 stub_status 不是 metrics 格式,需用 exporter 转换。推荐 nginx-lua-prometheus(需 Lua 支持)或轻量级方案:
- 用
curl -s http://127.0.0.1:8080/nginx-status抓取文本 - 通过 awk/grep 提取字段,转成 Prometheus 格式(如
nginx_active_connections 12) - 写入临时文件或通过
textfile_collector暴露给 Prometheus
重点关注指标:持续上升的 Active connections、Writing 占比异常高、Waiting 接近零——都可能预示连接耗尽或后端阻塞。











