我在RHEL 7.2上运行kibana 4.4.1
当kibana.yml文件不包含设置server.basePath
时,一切正常。 Kibana成功启动并吐出消息
[info][listening] Server running at http://x.x.x.x:5601/
curl http://x.x.x.x:5601/app/kibana
返回预期的HTML。
但是,当basePath设置为server.basePath: "/kibana4"
时,http://x.x.x.x:5601/kibana4/app/kibana会产生404.为什么?
服务器以相同的日志记录
成功启动[info][listening] Server running at http://x.x.x.x:5601/
但是
curl http://x.x.x.x:5601/
返回
<script>
var hashRoute = '/kibana4/app/kibana';
var defaultRoute = '/kibana4/app/kibana';
...
</script>
curl http://x.x.x.x:5601/kibana4/app/kibana
返回
{"statusCode":404,"error":"Not Found"}
为什么&#39; / kibana4 / app / kibana&#39;返回404?
答案 0 :(得分:5)
server.basePath
的行为与我的预期不符。
我希望server.basePath
对称地影响网址。这意味着请求URL将位于子域/ kibana4下,响应URL也将位于子域/ kibana4下。
事实并非如此。 server.basePath
不对称地影响网址。这意味着所有请求URL保持不变,但响应URL包含subdomin。例如,仍在http://x.x.x.x:5601/app/kibana访问kibana主页,但所有hrefs URL都包含子域名/ kibana4。
server.basePath
仅在您将请求转发给kibana之前使用删除子域的代理时才有效
以下是我使用的HAProxy配置
frontend main *:80
acl url_kibana path_beg -i /kibana4
use_backend kibana if url_kibana
backend kibana
mode http
reqrep ^([^\ ]*)\ /kibana4[/]?(.*) \1\ /\2\
server x.x.x.x:5601
重要的一点是reqrep
表达式,它在将请求转发给kibana之前从URL中删除子域/ kibana4。
答案 1 :(得分:0)
另外,更改server.basePath后,可能需要修改nginx conf来重写请求,否则无法生效。以下是对我有用的一个
location /kibana/ {
proxy_pass http://<kibana IP>:5601/; # Ensure the trailing slash is in place!
proxy_buffering off;
#proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
#access_log off;
}