Nginx单Server配置多Location实现Kibana与Portainer分路径访问
解决Nginx单Server多Location代理Kibana和Portainer的问题
问题根源
当前配置未处理应用基础路径匹配和代理路径转发规则:
- Kibana与Portainer默认基于根路径(
/)提供服务,通过/kibana或/portainer访问时,应用内部的资源请求(如CSS、JS、API接口)仍会指向根路径,导致Nginx无法正确路由。 proxy_pass后未加斜杠时,Nginx会将完整location路径(如/kibana/api)转发到后端,但后端服务期望的是/api,路径不匹配引发报错。
正确配置方案
1. 调整Kibana配置(kibana.yml)
修改Kibana的基础路径,让它知晓自身运行在/kibana下:
server.basePath: "/kibana" server.rewriteBasePath: true
修改后重启Kibana服务生效。
2. 调整Portainer启动参数
启动Portainer时指定基础路径(以容器部署为例):
docker run -d -p 9443:9443 --name portainer --restart=always \ portainer/portainer-ce:latest --path /portainer
3. Nginx单Server最终配置
server { listen 80; server_name localhost 127.0.0.1; # Kibana代理配置 location /kibana/ { proxy_pass http://kibana:5601/; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Prefix /kibana; } # Portainer代理配置 location /portainer/ { proxy_pass https://portainer:9443/; proxy_set_header X-Forwarded-For $remote_addr; # 本地Portainer多使用自签证书,临时关闭SSL验证(生产环境建议配置证书信任) proxy_ssl_verify off; } # 可选:处理不带结尾斜杠的请求重定向,避免资源加载错误 location = /kibana { return 302 /kibana/; } location = /portainer { return 302 /portainer/; } }
配置说明
proxy_pass末尾加/:Nginx会剔除location前缀(如/kibana/),将剩余路径转发到后端(例如/kibana/api→http://kibana:5601/api)。X-Forwarded-Prefix:告知Kibana当前访问前缀,确保内部路径生成正确。- 结尾斜杠重定向:避免用户访问
/kibana(无斜杠)时出现资源加载失败的情况。
内容的提问来源于stack exchange,提问作者KosiB
相关产品推荐
相关产品推荐

