必须在编译时显式启用--with-http_stub_status_module模块,配置location /nginx_status { stub_status; }并配合访问控制与路径隐藏以保障安全。

要让 Nginx 支持实时连接状态监控,--with-http_stub_status_module 是必须在编译阶段显式启用的模块。它不依赖外部库,也不默认开启,漏掉这个参数,后续配置再正确也会报错。
启用 stub_status 模块的必要步骤
该模块提供基础运行指标:当前活跃连接数、已接受/已处理请求数、当前正在读写/等待的连接数。这些数据对容量评估和故障初判很实用。
- configure 时务必加入 --with-http_stub_status_module,例如:
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module - 编译安装完成后,在 nginx.conf 的某个 server 块内添加 location 配置:
location /nginx_status { stub_status; access_log off; } - 执行
nginx -t && nginx -s reload生效,之后用curl http://127.0.0.1/nginx_status即可获取纯文本状态页
常见搭配与安全加固建议
状态页暴露的是整个 Nginx 实例(非单个虚拟主机)的全局统计,生产环境不能裸露。
- 建议配合基础认证保护,例如在 location 块中追加:
auth_basic "Status Restricted"; auth_basic_user_file /usr/local/nginx/conf/.htpasswd; - 限制访问来源更稳妥,比如只允许内网或监控服务器 IP:
allow 192.168.10.0/24; deny all; - 避免使用默认路径
/nginx_status,可改用更隐蔽的路径如/status-2a7f,降低被扫描发现概率
其他高频编译参数参考
实际部署中常与 stub_status 一并启用的模块,多为性能或安全刚需:
- --with-http_ssl_module:支持 HTTPS,需系统已安装 OpenSSL 开发包
- --with-http_v2_module:启用 HTTP/2 协议,提升并发响应效率
- --with-file-aio:开启文件异步 I/O,适合大文件静态服务场景
- --with-threads:启用线程池,缓解阻塞型操作对 worker 进程的影响
- 精简无用模块可减少攻击面,例如:
--without-http_autoindex_module --without-http_ssi_module --without-mail_smtp_module
注意事项与典型错误
很多问题出在编译前准备或配置细节上,而非参数本身。
- 未安装 pcre-devel 或 zlib-devel 会导致 configure 报错,即使没用到相关模块也可能间接依赖
- 启用
--with-http_stub_status_module后,若配置中写成stub_status on;会失败——新版语法只需stub_status;,无需 on/off - 状态页返回内容是固定格式纯文本,不支持 JSON 或 HTML 渲染,如需图形化展示,得靠外部工具(如 Prometheus + nginx-vts-exporter)对接


















