Nginx stub_status模块用于轻量级实时监控,需先确认编译时启用--with-http_stub_status_module,再在server块(非http块)中配置location /status { stub_status; access_log off; allow/deny控制访问 },HTTPS场景须置于listen 443 ssl server块内并配好证书。

Nginx 的 stub_status 模块用于轻量级实时监控服务运行状态,核心是返回当前连接与请求的快照数据。它不依赖外部工具,但必须正确启用模块、配置位置、限制访问,否则可能暴露敏感指标或统计失效。
确认 stub_status 模块已编译启用
该模块不是默认内置,需在编译时显式加入:
- 执行
nginx -V 2>&1 | grep -o with-http_stub_status_module - 若有输出,说明已支持;若无,需重新编译并添加
--with-http_stub_status_module参数
注意:预装包(如 Ubuntu 的 nginx-full、CentOS 的官方 nginx)通常已包含此模块,但自定义编译或精简版可能未启用。
在 server 块中配置 status 路由
不能写在 http{} 级别,也不能仅配在 HTTP 80 端口就认为“完成”——尤其当服务实际走 HTTPS 时:
- 若监控 HTTPS 服务质量(如 TLS 握手数、加密连接),
/status必须放在listen 443 ssl的server{}块内 - 需确保该
server块已配置有效证书(ssl_certificate和ssl_certificate_key)
典型配置示例(HTTPS 场景):
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location /status {
stub_status;
access_log off;
allow 127.0.0.1;
allow 192.168.10.0/24;
deny all;
}
}强化访问安全
直接暴露 /status 存在风险,建议至少采用以下一种方式:
- IP 白名单(如上例中的
allow/deny) - 基础认证(配合
auth_basic和auth_basic_user_file) - 仅监听本地回环(如
listen 127.0.0.1:8080),再通过反向代理或 SSH 端口转发访问
不推荐 allow all 或注释掉 deny all,生产环境严禁公网可读。
理解返回内容与使用方式
访问 https://example.com/status(或对应地址)会返回纯文本,例如:
Active connections: 5 server accepts handled requests 12345 12345 67890 Reading: 0 Writing: 1 Waiting: 4
其中:
-
Active connections是当前所有 TCP 连接(含 keepalive 空闲连接) -
accepts/handled/requests是累计值,热重载(reload)不归零,但热升级(binary upgrade)会清零 -
Waiting高且Reading/Writing低,常表示客户端保持长连接但无新请求,属正常;若Writing持续堆积,可能后端响应慢或网络阻塞
可用 curl -s http://127.0.0.1/status | awk 'NR==3 {print $3}' 提取活跃连接数,便于脚本采集或接入 Prometheus(需搭配 nginx-exporter)。
配置本身不复杂,但容易忽略模块检查、HTTPS 上下文部署和访问控制这三个关键环节。


















