在 nginx 源码编译时添加 status 状态模块,需要在执行 ./configure 脚本时加入 --with-http_stub_status_module 参数。该模块是 nginx 的内置模块,默认可能未启用,通过显式指定即可将其编译进二进制文件。配置完成后重新编译并替换原有 nginx 可执行文件,即可在配置文件中通过 /nginx_status 路径访问实时状态数据。

如何确认当前 Nginx 是否已加载 status 模块
在添加模块前,先检查现有安装是否已包含该模块。运行 nginx -V 命令(注意是大写 V),查看输出中的 configure arguments 部分。如果其中包含 --with-http_stub_status_module,说明模块已存在,无需重新编译,只需在配置文件 nginx.conf 中添加对应的 location 块即可。若未包含,则必须进入源码目录进行重新编译。

./configure --prefix=/usr/local/nginx --with-http_stub_status_module make sudo make install
上述命令序列展示了标准的编译流程。首先使用 ./configure 指定安装路径并启用 stub_status 模块。接着使用 make 进行编译,注意不要执行 make install 覆盖系统原有配置,除非你确定要完全替换。最后使用 sudo make install 将新编译的二进制文件安装到指定目录。编译过程中,确保系统已安装必要的依赖库,如 gcc、make 和 pcre-devel 等。
编译后如何在配置文件中启用 status 页面
编译成功后,需要在 nginx.conf 中定义一个 location 来暴露状态信息。在 server 块内添加如下配置:location /nginx_status { stub_status; } 。这会将 /nginx_status 路径映射到 stub_status 模块。重启 Nginx 服务后,访问 http://your-ip/nginx_status 即可看到类似以下的输出:
Active connections: 1 server accepts handled requests 166 166 1254 Reading: 0 Writing: 1 Waiting: 0

location /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}这段配置不仅启用了 stub_status,还限制了访问权限,仅允许本地回环地址 127.0.0.1 访问,拒绝其他所有 IP。这是出于安全考虑,因为状态页面包含服务器负载等敏感信息。在实际生产环境中,建议结合 allow 和 deny 指令严格控制访问源,避免信息泄露。重启 Nginx 后,只有来自 127.0.0.1 的请求才能获取状态数据,其他请求将被拒绝。
status 页面输出的各字段具体含义是什么
当访问 /nginx_status 时,输出的第一行 Active connections 表示当前活跃的客户端连接数,包括正在等待请求处理的连接。第二行 server accepts handled requests 后的三个数字分别表示:总共处理的连接数(accepts)、成功创建的握手次数(handled)、以及总共处理的请求数(requests)。如果 accepts 和 handled 不一致,说明有连接在握手阶段失败。第三行 Reading: Writing: Waiting: 分别表示正在读取客户端请求头数的连接、向客户端发送响应头/体数的连接、以及保持活动状态等待进一步请求的连接数。这些指标有助于监控 Nginx 的运行状态和性能瓶颈。


















