我把头发拉出来因为它一定很简单。
我已经设置Grafana通过代理运行子域,工作正常。我正在进行基本身份验证以登录Grafana,这是我的apache配置:
<VirtualHost *:80>
ServerAdmin [email protected]
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 。标题}})
知道我做错了什么以及我如何将IP重定向到域名:3000,例如ProxyPass正在使用反向代理?
我正在使用Ubuntu 12.04
我已经完成了各种各样的事情,比如添加尾部斜杠,从apache和grafana配置中删除它们,我每次都使用隐身,以确保没有缓存,我只是无法让它在反向代理中工作我正在尝试将IP重定向到我在Grafana和ProxyPass中设置的域。
请帮忙!
如果这可能是问题,我不是100%确定。但是,让我们试一试:尝试在ProxyPass指令后删除斜杠:
ProxyPass /application http://localhost:3000
ProxyPassReverse /application http://localhost:3000
对于那些斜杠,Grafana似乎非常挑剔。我和那些小虫子有几个问题:)我将在下面进一步解释细节。一个非常简单的工作设置(虽然没有特定的身份验证)如下所示:
<VirtualHost *:443>
ServerName example.co
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# grafana
ProxyPass /grafana http://thorin:3000
ProxyPassReverse /grafana http://thorin:3000
</VirtualHost>
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对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产生了一些有趣的影响:
事实证明,格拉法纳不喜欢我们在这里介绍的重定向和削减政策。解决方案是仅为需要它的应用程序启用此重写规则:
# 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]
如果这有帮助,请告诉我:)