问题:反向代理kibana后,访问 localhost:8080/kibana
会重定向为 localhost/app/kibana
有没有办法限制kibana保持端口和路由情况下访问。问题Nginx配置如下:
server {
listen 8080 default;
server_name localhost;
root /www;
index index.php index.html index.htm;
location /api {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
location /log-viewer {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
location /kibana/ {
proxy_pass http://kibana:5601/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
root /www/xsq_service_center/dist;
try_files $uri $uri/ /index.html;
}
}
这段Nginx按理说是没问题的,不需要调整。
期望:例如访问 localhost:8080/kibana
它既使修改路由也应该安全地跳到 localhost:8080/kibana/app/kibana
解决办法:
要确保访问localhost:8080/kibana
时,Kibana的内部路由更改不会影响到Nginx的代理路径,你需要在Kibana的配置中进行一些调整,以便它能够理解它是在一个子路径下运行的。Kibana允许你配置一个基路径,这可以通过修改Kibana的配置文件kibana.yml来实现。
在kibana.yml文件中,添加或修改以下设置:
server.basePath: "/kibana"
这告诉Kibana它应该在/kibana
路径下运行,而不是根路径。这样,当Kibana生成内部链接时,它会自动添加/kibana作为所有相对链接的前缀,从而避免了重定向到/app/kibana
之类的情况。
同时,确保你的Nginx配置正确地代理所有以/kibana开头的请求到Kibana服务器。你的配置看起来已经正确地设置了这一点:
location /kibana/ {
proxy_pass http://kibana:5601/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
但是,为了确保Kibana的所有子路径都被正确处理,你可能需要将/kibana/的location块的路径改为/kibana,这样它就能匹配所有以/kibana开头的请求,无论后面跟什么路径。Nginx的location块的路径匹配是前缀匹配,所以/kibana将匹配/kibana/和/kibana/some/path。
确保在修改完配置后重启Kibana和Nginx服务,以使新的配置生效
# 重启Kibana
sudo systemctl restart kibana
# 重启Nginx
sudo systemctl restart nginx
这样,当你访问localhost:8080/kibana
时,所有的Kibana内部链接都会保持在/kibana路径下,而不会尝试重定向到/app/kibana。