You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理Grafana时iframe认证后仍跳转登录页问题

解决Grafana反向代理认证后仍跳转登录页的问题

问题核心是:虽然Nginx的auth_request已经通过Django认证返回200,但Grafana的代理认证模块没有获取到已认证用户的信息,所以依然会触发登录跳转。以下是具体修复步骤:

1. 补全Grafana代理认证的核心配置

当前grafana.ini里的auth.proxy仅开启了功能,但未指定从哪个请求头获取用户信息,导致Grafana无法识别已认证用户。修改配置如下:

#################################### Auth Proxy ##########################
[auth.proxy]
enabled = true
# 指定Grafana读取用户信息的请求头名称
header_name = X-Forwarded-User
# 对应头中的属性为用户名
header_property = username
auto_sign_up = true
;sync_ttl = 60
;whitelist = XXX, XXX
;headers = Email:X-User-Email, Name:X-User-Name
;headers_encoded = false
;enable_login_token = false

[server]
# 信任本地Nginx代理(Grafana与Nginx在同一服务器)
trusted_proxies = 127.0.0.1
# 配置Grafana根URL,确保反向代理路径匹配
root_url = https://grafana.myserver.com/

2. 修改Nginx配置,传递用户信息到Grafana

需要让Nginx从Django认证接口的响应中提取用户信息,再转发给Grafana。假设你的Django/auth/check/接口在认证通过时会返回X-User响应头(值为用户名),修改Nginx配置:

server {
    server_name  grafana.myserver.com;
     
    location / {
        proxy_set_header Host $host;
        proxy_pass           http://localhost:3000/;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location ~ ^/iframe(.*)$ {
        auth_request /iframe-auth;
        # 从认证接口的响应头中提取用户名(对应Django返回的X-User头)
        auth_request_set $auth_user $upstream_http_x_user;
        set $iframe_url http://localhost:3000$1$is_args$args;
        proxy_pass $iframe_url;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Authorization $http_authorization;
        # 将用户名通过指定头传递给Grafana
        proxy_set_header X-Forwarded-User $auth_user;
    }

    location = /iframe-auth {
        internal;
        proxy_pass https://blub.de/auth/check/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
    }
}

3. 关键注意事项

  • 匹配接口返回的用户头:如果Django认证接口返回的不是X-User,要对应修改Nginx里的$upstream_http_xxx(比如返回X-Username就改成$upstream_http_x_username),同时同步修改Grafana的header_name。
  • 重启服务:修改配置后,执行systemctl restart nginx和systemctl restart grafana-server(根据你的服务管理方式调整)。
  • 日志排查:若问题依旧,打开Grafana的debug日志(在grafana.ini的[log]部分设置mode = debug),查看请求是否携带了正确的X-Forwarded-User头,以及Grafana是否成功识别用户。

内容的提问来源于stack exchange,提问作者shadow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:27:36