使用 Grafana 的反向代理 (nginx)
Posted
技术标签:
【中文标题】使用 Grafana 的反向代理 (nginx)【英文标题】:Reverse Proxy (nginx) with Grafana 【发布时间】:2021-01-24 04:06:41 【问题描述】:我已按照 Grafana (https://grafana.com/tutorials/run-grafana-behind-a-proxy/#1) 提供的说明进行操作,但仍然没有成功。下面是我的 nginx 配置文件。问题是当我转到 http://www.example.com/grafana 时,它会将我重定向到返回 404 的 www.example.com/login。感谢您的帮助!
NGINX 配置文件
server
listen 80;
listen [::]:80;
server_name localhost;
location /
root /usr/share/nginx/html;
index index.html index.htm;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html
root /usr/share/nginx/html;
# Portainer
location /portainer/
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://www.example.com:9000/;
location /portainer/ws/
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_pass http://www.example.com:9000/ws/;
# Grafana
location /grafana/
proxy_pass http://www.example.com:3000/;
Grafana 配置文件
#################################### Server ####################################
[server]
# Protocol (http, https, h2, socket)
;protocol = http
# The ip address to bind to, empty will bind to all interfaces
;http_addr =
# The http port to use
;http_port = 3000
# The public facing domain name used to access grafana from a browser
;domain = example.com
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
;enforce_domain = false
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
;root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/
# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
;serve_from_sub_path = true
# Log web requests
;router_logging = false
# the path relative working path
;static_root_path = public
# enable gzip
;enable_gzip = false
# https certs key file
;cert_file =
;cert_key =
# Unix socket path
;socket =
【问题讨论】:
看来问题出在 grafana 方面。查看grafana的访问日志和“curl -v http://www.example.com:3000/”的输出 对不起,我试图弄清楚如何访问“访问日志”,但找不到任何东西。在 Portainer 中,当我尝试访问 grafana 时,它会输出这个。t=2020-10-11T19:50:38+0000 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/grafana/ status=302 remote_addr=172.17.0.1 time_ms=0 size=29 referer=
你能在 3000 端口上 curl 服务器吗?如果是这样,grafana 正在运行,我们可以只关注 nginx 问题。要测试,请尝试运行: curl -sS localhost:3000/login 这应该会返回一大段文本(通常会在浏览器中呈现登录屏幕) – user2863294 11 分钟前
关注this post
【参考方案1】:
在您的 Grafana 配置文件中,root_url
和 serve_from_sub_path
似乎在注释中,请尝试删除 ;
并重新加载 NGINX
【讨论】:
【参考方案2】:我认为您必须在 proxy_pass url 中添加“grafana”:
# Grafana
location /grafana/
proxy_pass http://www.example.com:3000/grafana/;
【讨论】:
我已经尝试过了,没有任何变化。我更新了我的帖子以包含 Nginx 配置文件和 Grafana 配置文件。【参考方案3】:如果 grafana 在子路径上运行反向代理,则在 grafana 配置文件中,root url
需要相应更新。
查看相关documenttion
这是用于从网络浏览器访问 Grafana 的完整 URL。这 如果您使用 Google 或 GitHub OAuth 身份验证(对于 回调 URL 是正确的)。
注意:如果您有反向代理,此设置也很重要 Grafana 的前面,通过子路径公开它。在这种情况下添加 此 URL 设置末尾的子路径。
【讨论】:
谢谢。我已经对 Grafana 配置文件进行了此更改(请参阅包含 Grafana 配置文件的更新帖子)。也许我错过了配置文件中的某些内容...以上是关于使用 Grafana 的反向代理 (nginx)的主要内容,如果未能解决你的问题,请参考以下文章
使用仪表板作为子路径的 Grafana 的 Nginx 反向代理
将 Nginx Bad Gateway 用作 Grafana 的反向代理时发生错误
Nginx 反向代理背后的 Grafana 返回 alert.title