我在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返回预期的超文本标记语言。
但是,当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"}
为什么'/kibana4/app/kibana‘返回404?
发布于 2016-03-29 22:42:19
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。
仅当您使用在将请求转发到kibana之前删除子域的代理时,server.basePath才有效
下面是我使用的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之前将子域/kibana4从URL中删除。
发布于 2021-06-25 18:51:00
另外,在更改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;
}https://stackoverflow.com/questions/36266776
复制相似问题