vts模块为每个虚拟主机提供独立流量监控,支持json/html接口、多维度统计及prometheus/grafana集成,无需重编译nginx即可开箱即用。

想实时看清每个虚拟主机的流量分布、响应状态和请求速率?Nginx 自带的 stub_status 只能看全局指标,而 VTS(Virtual Host Traffic Status)模块 正是为此设计——它为每个 server 块(即每个虚拟主机)单独统计并提供 JSON 接口与 HTML 页面,配合 Prometheus + Grafana 或简单内嵌页面即可实现可视化监控。
为什么选 VTS 而不是官方 status 或第三方插件?
VTS 是目前最成熟、轻量且专为多虚拟主机场景优化的 Nginx 流量监控方案:
- 原生支持按 server_name、upstream、filter(如按 location 或自定义变量)分组统计
- 指标全面:请求数、成功/失败/重定向次数、流量(in/out)、响应时间(min/avg/max)、缓存命中率等
- 不依赖外部服务:内置 HTTP 接口(
/status/format/json)和默认 HTML 页面(/status),开箱即用 - 兼容主流 Nginx 版本(1.10–1.24),支持动态模块加载(无需重新编译整个 Nginx)
快速集成 VTS 模块(以动态模块方式为例)
避免重编译 Nginx 主体,推荐使用动态模块安装:
- 确认 Nginx 已启用
--with-http_ssl_module和--with-stream(VTS 部分功能依赖) - 下载对应版本的 nginx-module-vts 源码
- 执行
./configure --add-dynamic-module=/path/to/nginx-module-vts && make modules,生成ngx_http_vhost_traffic_status_module.so - 在 nginx.conf 的
main上下文中添加:load_module modules/ngx_http_vhost_traffic_status_module.so;
配置虚拟主机级监控与访问控制
在 http 块中启用模块,并为每个 server 定义唯一标识(server_name 自动识别):
- 启用模块:
vhost_traffic_status on;<br>vhost_traffic_status_zone;
- 暴露监控接口(建议加 IP 白名单或 Basic Auth):
location /status {<br> vhost_traffic_status_display;<br> vhost_traffic_status_display_format html;<br> allow 127.0.0.1;<br> allow 192.168.10.0/24;<br> deny all;<br>} - JSON 接口(供 Prometheus 抓取):
location /status/format/json {<br> vhost_traffic_status_display;<br> vhost_traffic_status_display_format json;<br> allow 127.0.0.1;<br>}
重启 Nginx 后,访问 http://your-gateway/status 即可看到所有虚拟主机的实时流量表格,含 QPS、响应码分布、带宽占用等关键列。
对接 Prometheus + Grafana 实现自动化可视化
VTS 提供标准 JSON 输出,天然适配 Prometheus 的 nginx-vts-exporter:
- 部署 nginx-vts-exporter,指向你的
/status/format/json接口 - Prometheus 配置 job 抓取 exporter 的
/metrics端点(默认 9913) - Grafana 导入社区模板(如 ID
10229或11962),自动渲染「每域名 QPS」「5xx 错误率趋势」「上游响应延迟 P95」等看板 - 可基于
vhost_traffic_status_upstream_fails_total等指标配置告警,例如某虚拟主机错误率突增 >1% 持续 2 分钟
不需写一行代码,就能把 Nginx 网关变成可观测性入口。










