Nginx 可通过内置 stub_status 模块快速启用轻量级状态页,暴露活跃连接数等指标;需验证模块启用、配置 location 路由、限制访问权限,并可用 curl 或 Prometheus 采集,注意禁止公网暴露及合理设置采集间隔。

通过 Nginx 内置的 stub_status 模块,可以快速启用一个轻量级状态页,直接暴露当前活跃连接数、已接受/处理请求总数、当前请求数等关键指标,无需额外安装插件或代理服务。
确认 stub_status 模块已编译启用
Nginx 默认编译时通常已包含 http_stub_status_module,但需验证是否启用:
- 执行
nginx -V 2>&1 | grep -o with-http_stub_status_module,若输出该字符串,说明模块可用 - 若无输出,需重新编译 Nginx 并添加
--with-http_stub_status_module - 注意:OpenResty 或某些精简版发行包(如 Alpine 官方镜像)可能默认不启用,需检查基础镜像或构建参数
在 server 块中配置 stub_status 路由
只需在任一 server 配置块内添加 location,例如:
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1; # 仅允许本地访问
allow 10.0.0.0/8; # 可选:允许内网监控节点
deny all;
}重启或重载 Nginx 后,访问 http://your-nginx-host/nginx-status 即可看到类似以下响应:
Active connections: 12<br>server accepts handled requests<br> 12456 12456 34567<br>Reading: 0 Writing: 3 Waiting: 9
其中 Active connections 即当前活跃连接总数(含 Reading/Writing/Waiting),是实时监控的核心指标。
配合 Prometheus 或脚本实现自动化采集
stub_status 输出为纯文本,适合用简单工具解析:
- 用 curl + awk 提取活跃连接数:
curl -s http://127.0.0.1/nginx-status | awk 'NR==1 {print $3}' - Prometheus 用户可部署 nginx-lua-prometheus(更推荐)或使用 nginx-prometheus-exporter(需反向代理 stub_status 页面)
- 注意:stub_status 不支持 JSON 格式,所有字段位置固定,不建议依赖空格数量解析;推荐用正则匹配
Active connections: (\d+)
安全与生产注意事项
stub_status 页面暴露的是实时运行状态,虽不涉及敏感业务数据,但仍需严格控制访问权限:
- 禁止暴露到公网,必须配合
allow/deny或防火墙策略限制来源 IP - 避免在 default_server 或泛域名 server 中开放,防止被意外探测
- 若使用 HTTPS 站点,确保 /nginx-status 也走 HTTPS,避免混合内容警告(尤其前端调用时)
- 高并发场景下,频繁轮询该页面本身会新增少量连接,建议采集间隔 ≥ 5 秒


















