我正在尝试使用 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。
我仍然想找到一种方法来做到这一点,而根本不需要修改上游服务器。