You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:33:35