使用 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_urlserve_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

nginx反向代理背后的grafana

使用 Docker 并希望 HTTP 到 HTTPS 使用 NGINX 反向代理到 HTTP Grafana

nginx 后面的 Grafana 6.7 auth 代理,用于自动 UI 登录