跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何配置路径级的 Basic Auth 认证保护内部监控页面

路径级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 {
stub_status on;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
allow 192.168.10.5;
deny all;
}
若该路径需同时供多个系统访问(如 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:
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:
- targets: ['localhost:9090']
basic_auth:
username: monitor
password: xxx
Grafana 添加 Prometheus 数据源时,在 URL 中嵌入凭证(仅限可信内网):
http://monitor:xxx@prometheus.example.com:9090
,或在数据源设置里填用户名密码

相关文章