Nginx 代理本地主机上的应用程序

Nginx proxy to application on localhost

我在端口 80 上设置了一个 nginx 网络服务器。 我的 (SonarQube) 应用程序在端口 9000 上运行。当我请求 http://www.example.com/sonar/ 我希望被重定向到 Sonar,所以我将它添加到我的 nginx 配置中:

location /sonar/ {
    proxy_pass  http://127.0.0.1:9000/;

    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_read_timeout  1800;
    proxy_connect_timeout 1800;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

但是,当我转到 http://www.example.com/sonar/ 时,此页面上的每个 link 都会转到 http://www.example.com/ 而不是http://www.example.com/sonar/。所以样式表、css 脚本和 link 都被破坏了。我怎样才能解决这个问题?我尝试了 rewrite,但似乎无法正常工作....

问题出在 proxy_pass 行。在您的情况下,它应该是:

proxy_pass  http://127.0.0.1:9000;

但不是:

proxy_pass  http://127.0.0.1:9000/;

proxy_pass 指令中,如果您指定的 URI 在您的例子中是 /,则匹配的 URI /sonar/ 将被替换为指定的 URI /