我在一个服务器上运行一个Django应用程序,我在另一个服务器上运行grafana,nginx作为反向代理(grafana和nginx在同一个服务器上)。
我可以设法重定向一个传入的URL并通过我的后端对其进行身份验证,但我仍然会被重定向到grafana登录屏幕,即使我的django应用程序发送了一个200响应
我的设置:
1.我有一个grafana服务器在https下运行,带有nginx代理。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;
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;
}
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;
}
}
字符串
在上面的例子中,我使用nginx auth模块来重定向来自我的django后端服务器iframe的传入URL。在这里,我进行身份验证,效果很好。我通过打印出URL来测试这一点,我正在验证用户,如果通过验证,我将返回200响应。
好吧,酷。我现在希望我的iframe会显示在我的网站上。但事实并非如此。相反,我得到一个重定向到grafana登录屏幕。
nginx可以做我想做的事情吗?
我的grafana.ini配置是标准的,我没有做太大的改变,但我将auth.proxy
设置为启用:
#################################### Auth Proxy ##########################
[auth.proxy]
enabled = true
;header_name = X-WEBAUTH-USER
;header_property = username
auto_sign_up = true
;sync_ttl = 60
;whitelist = XXX, XXX
;headers = Email:X-User-Email, Name:X-User-Name
# Non-ASCII strings in header values are encoded using quoted-printable encoding
;headers_encoded = false
# Read the auth proxy docs for details on what the setting below enables
;enable_login_token = false
型
任何帮助都是感激的。提前致谢
1条答案
按热度按时间voase2hg1#
我在“Grafana documentation / Set up / Configure security / Configure authentication / Auth proxy”中读到
字符串
换句话说,为了让Grafana的auth代理功能正常工作,它希望看到一个包含用户名的特定头。该头由
grafana.ini
文件中的header_name
定义。但是在您的例子中,
header_name
在grafana.ini
文件中被注解掉了。此外,在Nginx配置中没有header_name
的设置。因此,很可能Grafana不知道 * 在哪里 * 查找用户名...这使其重定向到登录屏幕。尝试将
header_name
添加回grafana.ini
,并将其设置为类似X-WEBAUTH-USER
或您选择的任何头名称。参见“Single sign-on authentication on Django and Grafana”作为说明。然后,在Nginx配置中(在
/iframe
位置块中),您需要使用proxy_set_header
设置此头文件并将其沿着给Grafana。你的Django应用程序应该在成功认证后返回这个头,Nginx应该拾取它并传递沿着。型
如果
X-WEBAUTH-USER
和$http_x_webauth_user
不相同,则应将它们替换为经过身份验证的请求中的实际头名称和值。proxy_set_header X-WEBAUTH-USER $http_x_webauth_user;
行告诉Nginx从传入的请求中获取X-WEBAUTH-USER
头部并将其沿着给Grafana。确保你的Django应用在成功认证后返回这个头文件和用户名。
例如,在“Single sign-on authentication on Django and Grafana”中提到的Django视图(已经在上面提到过)。