在 nginx 中监控状态需要启用 stub_status 模块,并在配置文件中为特定 location 开启该功能。通过访问配置的 url,nginx 会返回包含活跃连接数、接受连接数等关键指标的纯文本数据,供 prometheus 等监控系统抓取。

如何配置 Nginx 以暴露 stub_status 接口
要获取状态信息,必须在 nginx.conf 的 server 块中添加一个专用的 location,并调用 stub_status 指令。通常建议将此接口限制在内网 IP 或特定用户访问,以防止敏感信息泄露。配置完成后重载 Nginx 即可生效。

server {
listen 80;
server_name example.com;
# 其他业务配置...
location /nginx_status {
stub_status on;
# 可选:限制访问来源
allow 192.168.1.0/24;
deny all;
}
}
上述配置定义了一个名为 /nginx_status 的路径。当请求到达时,Nginx 不会处理任何 HTML 内容,而是直接输出当前的状态统计。确保编译 Nginx 时包含了 --with-http_stub_status_module 参数,否则该指令将不可用。
如何解析和提取 stub_status 返回的数据
访问配置的 URL 后,Nginx 返回的是一段格式固定的纯文本。第一行是标题,第二行包含三个核心数值:Active connections(活跃连接)、Accepts(总接受连接数)和 Handled(总握手成功数)。第三行以表格形式展示 Reading、Writing 和 Requests 的详细计数。监控工具通常使用正则表达式从这段文本中提取数字。

# 模拟 curl 命令的输出示例 curl http://example.com/nginx_status Active connections: 2 server accepts handled requests 100 100 500 Reading: 0 Writing: 1 Waiting: 1
在解析时,需注意 Accepts 和 Handled 理论上应相等,若出现差异可能意味着 Nginx 曾丢弃过连接。Waiting 字段表示当前处于 Keep-Alive 状态且正在等待新请求的连接数,这是判断连接复用效率的重要指标。对于自动化监控,建议使用专门的 exporter 如 nginx-prometheus-exporter 将这段文本转换为 Prometheus 格式的指标。
Active connections 与 Waiting 的区别是什么
Active connections 代表当前所有被 Nginx 处理的 TCP 连接总数,包括正在读写数据的连接和保持空闲的 Keep-Alive 连接。Waiting 则是这些活跃连接中的一个子集,特指那些已经完成请求发送和接收,但客户端尚未发起下一个请求,因此 Nginx 正等待其后续指令的空闲连接。高 Waiting 值通常表明客户端连接复用良好,减少了 TCP 三次握手的开销;而低 Waiting 高 Active 则可能暗示大量短连接或并发请求激增。











