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

如何使用Nginx在同一域名下反向代理Jenkins、SonarQube等多个站点

问题根源
  • 当前配置里proxy_pass结尾携带了/,Nginx转发请求时会自动去除匹配到的location路径前缀,比如/sonar/demo会被转发为http://sonarqube:9000/demo
  • 核心原因是Jenkins和SonarQube默认生成的页面资源、跳转链接都是基于根路径/生成的,不会自动带上你配置的/jenkins、/sonar前缀,导致浏览器发起资源请求时直接访问根路径下的资源,触发404。
修复方案

第一步:修改服务自身的上下文路径配置

SonarQube配置

启动容器时添加环境变量SONAR_WEB_CONTEXT=/sonar,docker run启动时可添加参数:
-e SONAR_WEB_CONTEXT=/sonar
docker-compose.yml配置示例:

services:
  sonarqube:
    image: sonarqube:latest
    environment:
      - SONAR_WEB_CONTEXT=/sonar
    # 其余配置保持不变

配置后SonarQube所有生成的链接都会自动带上/sonar前缀。

Jenkins配置

启动容器时添加环境变量JENKINS_OPTS="--prefix=/jenkins",docker run启动时可添加参数:
-e JENKINS_OPTS="--prefix=/jenkins"
docker-compose.yml配置示例:

services:
  jenkins:
    image: jenkins/jenkins:lts
    environment:
      - JENKINS_OPTS=--prefix=/jenkins
    # 其余配置保持不变

配置后Jenkins所有内部链接都会自动带上/jenkins前缀。

第二步:调整Nginx配置

修改后配置如下,注意proxy_pass结尾不要加多余的斜杠,同时补充必要的代理头保证服务能正确识别请求来源:

server {
  listen 80;
  server_name my.domain.com;

  # 通用代理头配置
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;

  location /sonar {
    # 结尾不要加斜杠,保证路径前缀完整转发到上游
    proxy_pass http://sonarqube:9000;
  }

  location /jenkins {
    # 结尾不要加斜杠,保证路径前缀完整转发到上游
    proxy_pass http://jenkins:8080;
    # Jenkins额外适配配置,避免大请求头报错
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
  }
}
验证操作
  • 重启Jenkins、SonarQube容器加载上下文配置
  • 执行nginx -s reload重载Nginx配置
  • 分别访问my.domain.com/jenkins和my.domain.com/sonar,确认页面资源路径都已携带对应前缀,无404异常即可。

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:00:03