Apache反向代理无法与Grafana一起使用

Apache反向代理无法与Grafana一起使用,apache,redirect,proxy,grafana,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/publi

我把头发拔出来是因为它一定很简单

我已经设置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>
我还尝试通过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>
重定向301/应用程序http://example.co/application/
AuthType Basic
AuthName“图形登录”
AuthUserFile/var/www/example.co/members/.htpasswd
需要有效用户
ProxyPasshttp://localhost:3000/
ProxyPassReversehttp://localhost:3000/
到域的代理传递工作正常,但是如果我使用IP地址,它不会到域,而是尝试将其加载为IP:3000/application,然后会出现Grafana错误(带有{{alert.title}的空白页)

知道我做错了什么吗?知道我如何将IP:3000重定向到DOMAIN:3000,比如ProxyPass使用反向代理所做的吗

我正在使用Ubuntu 12.04

我做过各种各样的事情,比如添加尾部斜杠,从apache和grafana配置中删除斜杠,我每次都使用incognito来确保没有缓存,我只是无法让它在反向代理中工作,我试图将IP重定向到我在grafana和ProxyPass中设置的域


请帮忙

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

ProxyPass /application http://localhost:3000
ProxyPassReverse /application http://localhost:3000
格拉法纳似乎对那些割伤非常挑剔。我对这些小家伙有几个问题:)我将在下面进一步解释细节。一个非常简单的工作设置(尽管没有特定的身份验证)如下所示:

阿帕奇 说明:斜杠 接下来,我解释了我所理解的意外行为的原因。为了完整性起见,除了代理设置之外,我还添加了一个与某些重写规则有关的问题

代理 那么,如果你保留斜线会发生什么

# 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中添加以下重写规则来解决此问题(可能有更好的解决方案;如果您有建议,请告诉我):

这在格拉法纳身上产生了一些有趣的效果:

  • 我们无法登录
  • 管理员/管理员帐户工作正常,但在更改默认密码时遇到了问题
  • 所有数据源都消失了
原来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]

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

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

ProxyPass /application http://localhost:3000
ProxyPassReverse /application http://localhost:3000
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中添加以下重写规则来解决此问题(可能有更好的解决方案;如果您有建议,请告诉我):

这在格拉法纳身上产生了一些有趣的效果:

  • 我们无法登录
  • 管理员/管理员帐户工作正常,但在更改默认密码时遇到了问题
  • 所有数据源都消失了
原来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]
如果有帮助,请告诉我:)