背景:
本地搭建好elk后,一切正常,后面改成用nginx代理kibana的5601端口,发现代理后无法正常访问(未代理的地址可正常访问),花了很多时间去查问题,报错基本都是http://ip:port/spaces/enter,或者404。
代理配置如下:
server {
listen 6667;
server_name localhost;
location /kibana/ {
proxy_pass http://192.168.0.111:5601/;
}
}
级别的错误,/符号缺少的情况都试过了,还是不行,只要你是要改他的访问地址就会报错
原因:
解决完问题后发现,应该是kibana他的页面访问有设计到重定向,比如你正常访问是ip:5601/app/.. 这样的地址, 你代理后换了端口和uri,变成了 ip:6666/kibana/app/..。本来代理后也能正常映射,问题是kibana他重定向了,当他回调回来时,本来应该是用5601端口的uri spaces/enter回调的,缺因为代理变成了6666端口,然后回调的uri没有给nginx代理捕捉到请求所以无法访问
http://ip:6666/spaces/enter
解决:
1:只代理端口,不代理uri,这样相当于只把5601换成别的端口。
server {
listen 6667;
server_name localhost;
location / {
proxy_pass http://192.168.0.111:5601/;
}
}
处理结果,可正常访问
2:即代理端口,也代理uri(只代理端口感觉都没必要用nginx,直接kibana配置文件修改port就可以)。给kibana添加基础路径,这个基础路径和代理的路径相同/kibana/,这样的话即使重定向后回调回来的端口不同为6667,因为有这个基础路径/kibana/,还是可以被nginx捕捉到正常进行代理访问
到kibana的配置文件config 目录,修改kibana.xml,添加配置
server.basePath: "/kibana"
server.rewriteBasePath: true
如:访问 http://ip:6667/kibana 进入登录页面(可访问),代理回调回来 http://ip:6666/kibana /spaces/enter(也可正常访问,因为nginx是代理了 http://ip:6667/kibana 为前缀的地址)
server {
listen 6667;
location /kibana/ {
proxy_pass http://192.168.0.111:5601/kibana/;
}
}
处理结果,可正常访问
其实还可以再nginx中,把可能出现的重定向uri全都路由回kibana 也可以,这样就可以kibana不添加基础路径,但是具体有哪些地址我不清楚就不做这样的解决方式了
以上就是我对nginx代理出现的无法正常访问的处理,上面的重定向是我猜的,不一定真实就是这样,如果有大佬质疑,请多指教