我正在尝试在nginx反向代理后面的docker-compose上运行Grafana,只要我将[auth.anonymous]设置为enabled = 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旨在显示在我的Web应用程序中的iframe上,但是由于我需要传递Authorization标头,因此我向nginx服务的/ grafana-dashboard /发出请求,然后将在iframe上出现“ blob”响应。
整个想法是要对grafana和我的webapp进行“单一登录”。 因此,刚刚登录Web应用程序的用户也无需登录grafana。但是,如果直接使用grafana(而不是通过iframe),则需要grafana登录屏幕或nginx简单身份验证。
答案 0 :(得分:0)
您的问题:
1. API密钥用于API访问,但是您尝试使用API密钥加载UI(不是/api
路径上可用的API)
2.您已启用身份验证代理,但未从nginx代理传递任何用户身份
解决方案:
答案 1 :(得分:0)
如上所述Jan,您没有从nginx代理传递用户身份信息。我使用了基本身份验证,并将以下行添加到了位置块
proxy_set_header Authorization "Basic <base64 encoded username:password>";
这使它起作用。最好是在Grafana中添加一个新的只读用户,并公开该用户而不是admin用户。您可能还想使用以下配置更新grafana.ini,以提高安全性。
session_life_time = 900
allow_sign_up = false
allow_org_create = false
答案 2 :(得分:0)
通过将Grafana HTTP API的API密钥作为cookie附加,我能够使它正常工作。然后,在我的let xxxx: Node[] = <COPY THE CONTENTS OF JSON>
中,我有:
nginx.conf
这样,您可以正常使用location /grafana-dashboard/ {
# The important line:
proxy_set_header Authorization "Bearer $cookie_grafana_key";
proxy_pass http://grafana:3000/;
}
,而不必担心设置标题。
此外,我不确定这是否是nginx配置问题,但是当我在AJAX请求中添加了授权标头和API密钥(而不是将密钥作为cookie传递)时,我也收到了原始错误。我不确定那里是什么。