kibana server.basePath导致404

时间:2016-03-28 16:46:29

标签: 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/

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?

2 个答案:

答案 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;
        }