kibana server.basePath结果为404

Nat*_*ese 5 kibana kibana-4

我在RHEL 7.2上运行kibana 4.4.1

当kibana.yml文件不包含该设置时,一切正常server.basePath.Kibana成功启动并吐出消息

[info][listening] Server running at http://x.x.x.x:5601/
Run Code Online (Sandbox Code Playgroud)

curl http://x.x.x.x:5601/app/kibana 返回预期的HTML.

但是,当basePath设置 为时server.basePath: "/kibana4",http:// xxxx:5601/kibana4/app/kibana会产生404.为什么?

服务器以相同的日志记录成功启动

[info][listening] Server running at http://x.x.x.x:5601/
Run Code Online (Sandbox Code Playgroud)

curl http://x.x.x.x:5601/ 回报

<script>
  var hashRoute = '/kibana4/app/kibana';
  var defaultRoute = '/kibana4/app/kibana';
  ...
</script>
Run Code Online (Sandbox Code Playgroud)

curl http://x.x.x.x:5601/kibana4/app/kibana 回报 {"statusCode":404,"error":"Not Found"}

为什么'/ kibana4/app/kibana'会返回404?

Nat*_*ese 6

server.basePath 不像我预期的那样.

我期待server.basePath对称地影响URL.这意味着请求URL将位于子域/ kibana4下,响应URL也将位于子域/ kibana4下.

不是这种情况.server.basePath不对称地影响URL.这意味着所有请求URL保持不变,但响应URL包含subdomin.例如,仍然可以在http:// xxxx: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
Run Code Online (Sandbox Code Playgroud)

重要的一点是在reqrep将请求转发给kibana之前从URL中删除子域/ kibana4 的表达式.