grafana - 在带有令牌身份验证的 iframe 中,在 nginx 反向代理后面设置 Grafana docker
问题描述
我正在尝试设置在 nginx 反向代理后面的 docker-compose 上运行的 Grafana,只要我将 [auth.anonymous] 设置为启用 = true,它就可以正常工作。
但是当我禁用匿名登录并尝试在标头中使用“授权”令牌登录时,导航到 Grafana sub_path 时出现以下错误:
如果您看到此 Grafana 未能加载其应用程序文件
这可能是由您的反向代理设置引起的。
如果您在子路径下托管 grafana,请确保您的 grafana.ini root_path 设置包含子路径
如果您有本地开发版本,请确保您使用以下方式构建前端:npm run dev、npm run watch 或 npm run build
有时重新启动 grafana-server 会有所帮助
我的 ngnix.conf 设置是:
server {
listen 80
charset utf-8
location /grafana-dashboard/ {
proxy_pass http://grafana:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
}
}
Grafana 在 docker-compose 的 grafana:3000 上运行。
docker-compose.config.yaml 内容为:
version: '3.4'
services:
grafana:
container_name: grafana
depends_on:
- db
networks:
- static-network
ports:
- 3000:3000
restart: always
volumes:
- grafana_stor:/var/lib/grafana
environment:
- GF_AUTH_PROXY_ENABLED=true
- GF_SERVER_DOMAIN=10.0.0.3
- GF_SERVER_ROOT_URL=http://10.0.0.3/grafana-dashboard/
user: "472"
volumes:
grafana_stor: {}
networks:
static-network:
ipam:
config:
- subnet: 172.20.0.0/16
在访问 10.0.0.3/grafana-dashboard/ 之前,我使用 Grafana HTTP_API /api/auth/keys 生成 API_KEY,然后在客户端的“Authorization: Bearer [token]”标头上传递返回的令牌。
澄清一下,grafana-dashboard 旨在显示在我的 webapp 内的 iframe 上,但由于我需要传递 Authorization 标头,因此我向 nginx 提供的 /grafana-dashboard/ 发出请求,然后放置“blob”对 iframe 的响应。
整个想法是对 grafana 和我的 webapp 进行“单点登录”。因此,刚刚登录 webapp 的用户也不需要登录 grafana。但是如果直接使用 grafana(不是来自 iframe),则需要 grafana 登录屏幕或 nginx 简单身份验证。
解决方案
通过将来自 Grafana HTTP API 的 API 密钥作为 cookie 附加,我能够使其工作。然后,在我的 中nginx.conf
,我有:
location /grafana-dashboard/ {
# The important line:
proxy_set_header Authorization "Bearer $cookie_grafana_key";
proxy_pass http://grafana:3000/;
}
这样,您可以iframe
正常使用 an 而不必担心设置标题。
此外,我不确定这是否是 nginx 配置问题,但是当我在 AJAX 请求中添加授权标头和 API 密钥时——而不是将密钥作为 cookie 传递——我也收到了原始错误。我不确定上面是什么。
推荐阅读
- python - ValueError:无法将字符串转换为浮点数:'01-01-20 0:15'
- highcharts - Highcharts - Highstock 图表在悬停数据点上显示双线以显示工具提示
- sql - 给所有月份的数字,这些数字在我的数据库中作为字符串,当用户选择任何月份时,下一行将自动填充
- c# - 如何使用 C# MongoDb 驱动程序更新深度嵌套数组中的“类型安全”字段?
- xcode - 命令代码符号失败,退出代码为非零 + onesignal + xcode 12.3
- ssl - 来自购买的通配符 SSL 的 Kubernetes SSL
- vue.js - 在 vuejs 的上下文中单击 chartjs 不会发生日期选择
- android - WebView 无法在浏览器和应用程序中打开链接
- javascript - Formik - 从两个单独的字段设置相同的字段值
- php - 与 Laravel spatie 包中的另一个需求冲突