nginx虚拟主机无法单独配置状态页,因stub_status模块提供的是全局进程级统计;可在任一server块中启用/status路径访问汇总数据,但所有虚拟主机返回相同指标,且需确保模块已编译启用并做好访问控制。

Nginx 中 Virtual Host(虚拟主机)本身不支持单独配置状态页,因为 ngx_http_stub_status_module 提供的状态页是全局服务器级的监控接口,不是按 server 块隔离的。也就是说,无论你定义多少个 server{}(即多少个虚拟主机),/status 或 /nginx_status 返回的都是整个 Nginx 进程的汇总统计,而非某个域名或站点的独立数据。
但你可以在某个虚拟主机的配置中启用并暴露状态页,只要注意以下几点:
✅ 状态页必须放在某个 server 块内,且路径需明确
比如你想让 www.cat.com 这个虚拟主机响应 /status 请求:
server {
listen 80;
server_name www.cat.com;
root /var/www/cat;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /status {
stub_status on; # 启用状态模块
access_log off; # 不记录访问日志
allow 127.0.0.1; # 仅允许本地访问
allow 192.168.1.0/24; # 或指定内网IP段
deny all; # 拒绝其他所有IP
}
}
⚠️ 注意:
stub_status on;是旧语法(Nginx stub_status;(无参数)
✅ 确保模块已编译启用
状态页功能依赖 --with-http_stub_status_module 编译选项。若你用的是系统包(如 Ubuntu 的 apt install nginx),该模块通常默认启用;但如果是源码编译安装,需确认编译时加了该参数:
nginx -V 2>&1 | grep -o with-http_stub_status_module
没输出即未启用,需重新编译。
✅ 路径可自定义,但不能跨 server 共享“专属”状态
你可以在不同 server 块里都配 location /status,但它们指向的是同一个统计源。例如:
-
www.cat.com/status→ 显示全站连接数、请求数等 -
www.dog.com/status→ 显示完全相同的数据,不是 dog 站点独有
所以它不是“每个虚拟主机一个状态页”,而是“每个虚拟主机可以提供一个入口访问全局状态”。
✅ 安全建议(强烈推荐)
- 不要开放给公网(避免信息泄露和被滥用)
- 配合
auth_basic做基础认证(可选):
location /nginx_status {
stub_status;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
allow 127.0.0.1;
deny all;
}
生成密码文件示例:
printf "admin:$(openssl passwd -crypt 123456)\n" > /etc/nginx/.htpasswd
不复杂但容易忽略。











