路径级basic auth认证指对特定url路径(如/nginx_status、/metrics)单独启用用户名密码验证,其他路径保持开放;需用htpasswd创建账号,在nginx的location块中配置auth_basic与auth_basic_user_file,并可结合allow/deny控制ip访问。

路径级 Basic Auth 认证,是指对特定 URL 路径(比如 /nginx_status 或 /metrics)单独启用用户名密码验证,而其他路径保持开放或使用不同策略。这种细粒度控制特别适合保护内部监控页面——既满足安全审计要求,又不干扰主服务访问逻辑。
明确目标路径并确认模块可用
先确认你要保护的路径是否由对应模块原生支持:
- Nginx 的
/nginx_status需确保http_stub_status_module已编译启用(主流系统默认包含) - Prometheus 的
/metrics或 Web UI 默认监听/,但可通过反向代理限定到子路径如/prom/ - 自定义应用的健康检查端点(如
/healthz、/admin/metrics)需确认后端服务已暴露且可被代理转发
在 Nginx 中为指定路径配置 Basic Auth
这是最常用、兼容性最强的方式,无需修改后端服务,适合所有版本的 Prometheus、Nginx 状态页、或任意 HTTP 服务的监控路径。
- 用
htpasswd创建专用账号(如monitor),密码加密存储:htpasswd -cB /etc/nginx/.htpasswd monitor - 在 server 或 location 块中针对目标路径设置认证:
location /nginx_status {<br> stub_status on;<br> auth_basic "Restricted Access";<br> auth_basic_user_file /etc/nginx/.htpasswd;<br> allow 192.168.10.5;<br> deny all;<br>} - 若该路径需同时供多个系统访问(如 Zabbix + Prometheus),在
allow行追加多个 IP;或改用 CIDR 段(如allow 10.0.0.0/8)
在 Prometheus 自身中启用路径级保护(≥2.24 版本)
如果你希望认证逻辑内聚在 Prometheus 内部,而非依赖 Nginx,可使用其原生 --web.config.file 参数。
- 创建
web-config.yml,只对 API 和 UI 启用认证,不影响 scrape 目标本身:basic_auth_users:<br> admin: "$2y$12$kXxrZP74Fmjh6Wih0Ignu.uWSiojl5aKj4UnMvHN9s2h/Lc/ui0.S"
- 启动时加载配置:
prometheus --web.config.file=web-config.yml ... - 注意:此配置作用于整个 Web 界面(包括
/、/api/v1、/metrics),不是严格“路径级”,但效果等同于保护全部监控入口
对接监控系统时的适配要点
开启 Basic Auth 后,Zabbix、Prometheus 自身抓取、Grafana 数据源都会因缺少凭证返回 401。必须显式补全认证头或凭据:
- Zabbix Web scenario:在 HTTP headers 中添加
Authorization: Basic base64(username:password) - Prometheus 抓取自身或其他带认证的
/metrics:在scrape_configs中加入basic_auth块:static_configs:<br> - targets: ['localhost:9090']<br>basic_auth:<br> username: monitor<br> password: xxx
- Grafana 添加 Prometheus 数据源时,在 URL 中嵌入凭证(仅限可信内网):
http://monitor:xxx@prometheus.example.com:9090,或在数据源设置里填用户名密码











