背景:
本地搭建好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/;
}
}
原因:
代理后的请求地址 http://ip:port/spaces/enter 无法被正常映射,
导致访问不到kibana服务器地址 http://192.168.0.111:5601/spaces/enter
解决完问题后发现,应该是kibana的页面访问有涉及到重定向回调
比如你服务器访问地址是 http://192.168.0.111:5601/app/XXX,
你代理端口和uri 后,访问变成了 http://ip:6667/kibana/app/XXX。
经过映射后地址就是http://192.168.0.111:5601/app/XXX。
问题是kibana他重定向了,当他内部回调回来时,
代理调用地址为 http://ip:6667/spaces/enter,
按这个地址的话,上面nginx的配置是无法正常映射到http://192.168.0.111:5601/spaces/enter的。
就算说你加上http://ip:6667/spaces/enter这个地址的映射到服务器中,指不定还有别的回调的uri地址得处理。
解决:
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
(就是服务器放访问uri路径前面都加上/kibana 原服务地址http://192.168.0.111:5601/app 变成http://192.168.0.111:5601/kibana/app)
到kibana的配置文件config 目录,修改kibana.xml,添加配置
server.basePath: "/kibana"
server.rewriteBasePath: true
如:
访问代理后地址 http://ip:6667/kibana/app 进入登录页面,按下面映射规则,地址映射为http://192.168.0.111:5601/kibana/app(相当于kibana服务器没加基础路径时候的http://192.168.0.111:5601/app)
代理回调地址 http://ip:6667/kibana/spaces/enter(明细可以被正常映射到服务器)
映射后地址 http://192.168.0.111:5601/kibana/spaces/enter(相当于kibana服务器没加基础路径时候的http://192.168.0.111:5601/spaces/enter)
server {
listen 6667;
location /kibana/ {
proxy_pass http://192.168.0.111:5601/kibana/;
}
}
处理结果,可正常访问
其实还可以在nginx中,把可能出现的重定向uri全都路由回kibana 也可以,这样就可以kibana不添加基础路径,但是具体有哪些地址我不清楚就不做这样的解决方式了
以上就是我对nginx代理出现的无法正常访问的处理,上面的重定向是我猜的,不一定真实就是这样,如果有大佬质疑,请多指教