最稳妥的做法是在location块中为/nginx_status路径单独配置auth_basic。1. 确认启用http_stub_status_module并开启stub_status;2. 创建独立bcrypt加密的monitor.htpasswd密码文件并设权限640;3. 在location /nginx_status中精确启用auth_basic;4. 强制https访问并测试重载生效。

直接在 location 块中为监控路径(如 /nginx_status)单独配置 auth_basic,不干扰其他服务,是最稳妥的做法。
1. 确保状态模块已启用
Nginx 必须编译并启用了 http_stub_status_module,否则 stub_status 指令无效:
- 检查是否支持:运行
nginx -V 2>&1 | grep -o with-http_stub_status_module,有输出即表示已启用 - 若未启用,需重新编译 Nginx 并添加
--with-http_stub_status_module - 确认配置中已开启状态页(通常放在
server或location内):stub_status on;access_log off;
2. 生成专用密码文件
不要复用其他项目的 .htpasswd,为监控页面创建独立凭证,降低权限扩散风险:
- 推荐路径:
/etc/nginx/auth/monitor.htpasswd(确保不在 Web 根目录下) - 创建首个用户(如
monitor),强制使用 bcrypt 加密:sudo htpasswd -Bc /etc/nginx/auth/monitor.htpasswd monitor - 设置安全权限:
sudo mkdir -p /etc/nginx/authsudo chown root:www-data /etc/nginx/auth/monitor.htpasswdsudo chmod 640 /etc/nginx/auth/monitor.htpasswd
3. 在监控 location 中精确启用认证
只作用于 /nginx_status 路径,不影响其他接口或静态资源:
- 配置示例(放在对应
server块内):location /nginx_status {<br> stub_status on;<br> access_log off;<br> auth_basic "Nginx Monitor Access";<br> auth_basic_user_file /etc/nginx/auth/monitor.htpasswd;<br>} - 注意:
/nginx_status是标准路径,若自定义了别名(如/status),需同步修改location匹配值 - 避免写成
location ~ /nginx_status—— 正则匹配可能意外覆盖或冲突,前缀匹配更可靠
4. 强制 HTTPS + 验证生效
Basic Auth 凭证在 HTTP 下明文可截获,监控页含连接数、请求速率等敏感信息,必须走 HTTPS:
- 确保该
server块监听443端口且配置了有效 TLS 证书 - 测试配置语法:
sudo nginx -t,确认输出test is successful - 重载生效:
sudo nginx -s reload - 访问
https://your-domain.com/nginx_status,应弹出登录框;输错返回401 Unauthorized











