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