首页 文章

Apache反向代理不使用Grafana

提问于
浏览
0

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

我已经设置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 . Headers }})

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

我正在使用Ubuntu 12.04

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

请帮忙!

1 回答

  • 0

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

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

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

    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 之后的额外斜杠 / . 尝试调用这些网址 . 它们不起作用 . 这是Grafana对网址非常挑剔:) Thus, removing the extra slashes from your Apache config will do the trick.

    至少这是我到目前为止提出的:)

    重写

    不,重写规则 . 在我们的设置中,我们在另一个子路径中设置了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产生了一些有趣的影响:

    • 我们无法登录

    • 管理员/管理员帐户工作但是它在更改默认密码时遇到困难

    • 所有数据源都消失了

    事实证明,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]
    

    如果这有帮助,请告诉我:)

相关问题