Apache反向代理不使用Grafana

时间:2017-11-07 04:50:11

标签: apache redirect proxy grafana

我把头发拉出来因为它一定很简单。

我已经设置Grafana通过代理运行子域,工作正常。我正在进行基本身份验证以登录Grafana,这是我的apache配置:

 <VirtualHost *:80>
      ServerAdmin webmaster@example.co
      ServerName example.co
      ServerAlias www.example.co
      DocumentRoot /var/www/example.co/public_html/
      ErrorLog /var/www/example.co/logs/error.log
      CustomLog /var/www/example.co/logs/access.log combined

     <Location "/application">
       AuthType Basic
       AuthName "Graphs Login"
       AuthUserFile /var/www/example.co/members/.htpasswd
       Require valid-user
       ProxyPass http://localhost:3000/
     </Location>
       ProxyPassReverse /application http://example.co:3000/

 </VirtualHost>

我的配置在grafana.ini

# The public facing domain name used to access grafana from a browser
domain = example.co

# 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/application/

我也尝试过301重定向:

Redirect 301 /application http://example.co/application/
<Location "/application/">
  AuthType Basic
  AuthName "Graphs Login"
  AuthUserFile /var/www/example.co/members/.htpasswd
  Require valid-user
  ProxyPass http://localhost:3000/
  ProxyPassReverse http://localhost:3000/
</Location>

域的ProxyPass工作正常,但是如果我使用IP地址它不会去域,而是尝试将其加载为IP:3000 /应用程序然后给出Grafana错误(空白页面包含{{alert.title}})

知道我做错了什么以及我如何将IP重定向到域名:3000,例如ProxyPass正在使用反向代理?

我正在使用Ubuntu 12.04

我已经完成了各种各样的事情,例如添加尾随斜杠,从apache和grafana configs中删除它们,我每次都使用隐身,以确保没有缓存,我只是无法让它工作在反向代理服务器中,我正在尝试将IP重定向到我在Grafana和ProxyPass中设置的域。

请帮忙!

1 个答案:

答案 0 :(得分:1)

我不确定100%是否可能是这个问题。但是,让我们尝试一下:尝试在ProxyPass指令后删除斜杠:

ProxyPass /application http://localhost:3000
ProxyPassReverse /application http://localhost:3000

格拉法纳(Grafana)对于这些斜线似乎很挑剔。这些小虫子对我有几个问题:)我将在下面进一步解释细节。一个非常简单的工作设置(尽管没有特定的身份验证)如下所示:

Apache

<VirtualHost *:443>
    ServerName example.co
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # grafana
    ProxyPass /grafana http://thorin:3000
    ProxyPassReverse /grafana http://thorin:3000
</VirtualHost>

Grafana

domain = example.co
root_url = %(protocol)s://%(domain)s/grafana

说明:斜杠

接下来,据我所知,我解释了意外行为的原因。为了完整起见,除了代理设置外,我还添加了一个有关某些重写规则的问题。

代理

那么,如果保留斜杠会怎样?

# WRONG!
ProxyPass /application http://localhost:3000/
ProxyPassReverse /application http://localhost:3000/

在这种情况下,您从Grafana收到的响应是一个丑陋的页面,显示{{alert.title}和许多其他未格式化的HTML。原因是Grafana无法加载某些资源:

http://example.co/application/public/build/grafana.dark.css?v5.2.4 
http://example.co/application/public/build/vendor.4f5454f867a0cc2fe8dd.js

但是,您的代理服务器设置可以正常工作,对吧?好吧,部分。它们的斜线/很小,导致在您的Grafana安装上进行了以下查找:

http://localhost:3000//public/build/grafana.dark.css?v5.2.4 
http://localhost:3000//application/public/build/vendor.4f5454f867a0cc2fe8dd.js

请注意/之后的额外斜杠http://localhost:3000。尝试调用这些URL。他们不工作。这是Grafana对URL的挑剔:) 因此,从您的Apache配置中删除多余的斜杠即可解决问题。

到目前为止,至少是我想出的:)

重写

否,重写规则。在我们的设置中,我们将Jekyll设置在另一个子路径中,例如http://example.co/jekyll,在其中我们使用相对URL来访问资源。这需要在每个URL的末尾加一个斜杠。我们通过在Apache中添加以下重写规则解决了这一问题(对此可能会有更好的解决方案;如果您有建议,请告诉我)

    # add trailing slashes to support relative URLs
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !(.*)\.[a-zA-Z0-9]+$
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ $1/ [R=301,L]

这对Grafana产生了一些有趣的影响:

  • 我们无法登录
  • admin / admin帐户可以正常工作,但是它无法更改默认密码
  • 所有数据源都消失了

事实证明,Grafana不喜欢我们在此处介绍的重定向和斜线策略。解决方案是仅为需要此规则的应用程序启用此重写规则:

    # add trailing slashes to support relative URLs
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !(.*)\.[a-zA-Z0-9]+$
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteCond %{REQUEST_URI} ^jekyll.*$
    RewriteRule ^(.*)$ $1/ [R=301,L]

让我知道这是否有帮助:)