sonarqube 的 nginx 反向代理

sonarqube 的 nginx 反向代理

我正在尝试使用 nginx 作为 sonarqube 的反向代理,但遇到了静态文件请求无法正确映射的问题。

我的代理是 proxy.com。我想在 proxy.com/sonar 上访问 sonarqube.internal.com:9000,并使其对客户端透明;一切都应该正常。

我已经完成了一半。sonarqube 主页可以正确加载。但是,sonarqube 页面上的所有链接都构建得不太正确。它们缺少 /sonar 位置。例如,我希望它们是 proxy.com/sonar/dashboard/index/blah,但它们显示为 proxy.com/dashboard/index/blah。因此:

我的服务器配置文件:

server {
  listen   80 default;
  server_name  _;

  access_log  /var/log/nginx/localhost.access.log;
  error_log /var/log/nginx/localhost.error.log notice;
  rewrite_log on;

  location / {
    include proxy.conf;
    if ($http_referer ~* /sonar ) {
      rewrite ^(.*) /sonar$1 last;
    }
    proxy_pass http://build.internal.com:8080;
  }

  location /sonar {
    include proxy.conf;
    proxy_pass http://build.internal.com:9000/;
    access_log /var/log/nginx/sonar.access.log;
    error_log /var/log/nginx/sonar.error.log notice;
  }

  location /nexus {
    include proxy.conf;
    proxy_pass http://nexus.internal.com:8081;
    acess_log /var/log/nginx/nexus.access.log;
  }
}

我的proxy.conf:

proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   90s;
proxy_send_timeout      90s;
proxy_read_timeout      90s;
proxy_buffers           32 4k;

我基于 referer 进行的重写可以加载初始页面(这是我的第一个挑战),但无法正确设置链接。有没有办法让发往该应用程序的所有请求都带有 /sonar 位置?

答案1

我通过这样做让它工作:

    location / {
    include proxy.conf;
if ($http_referer ~* /sonar ) {
  rewrite ^(.*) /sonar$1 last;
}
    proxy_pass build.internal.com:8080;
}

  location /sonar {
    include proxy.conf;
    proxy_pass build.internal.com/sonar;
    access_log /var/log/nginx/sonar.access.log;
    error_log /var/log/nginx/sonar.error.log notice;
  }

然后在 sonarqube 配置中有一个属性将上下文设置为 /sonar。

我仍然想找到一种方法来做到这一点,而根本不需要修改上游服务器。

相关内容