Nginx 反向代理到不同位置的多个站点

Nginx reverse proxy to multiple sites on different locations

是否可以配置 nginx 反向代理,其中 http://localhost/a/ 指向 1 个站点,而 http://localhost/b/ 指向另一个站点?我试过这个配置:

server {
    listen       80;
    server_name  localhost;

    location /a/ {
        proxy_pass http://apache.org/;
    }

    location /b/ {
        proxy_pass http://www.gnu.org/;
    }

几乎可以,但是网页返回的link都缺少/a/或/b/前缀,因此无法加载任何图片、样式等。例如link http://localhost/css/styles.css 不工作,但是 http://localhost/a/css/styles.css 工作。

是否有一个指令可以在页面上附加所有 links 合适的前缀?或者有不同的方法将网站放在不同的位置?

@ivan-shatsky,非常感谢。

只是想在其他人需要时添加工作配置。

map $http_referer $prefix {
    ~https?://[^/]+/a/     a;
    default                   b;
}

server {
    listen       80;
    server_name  localhost;

    location / {
        try_files /dev/null @$prefix;
    }

    location /a/ {
        proxy_pass http://apache.org/;
    }

    location @a {
        proxy_pass http://apache.org;
    }

    location /b/ {
        proxy_pass http://www.gnu.org/;
    }
    location @b {
        proxy_pass http://www.gnu.org;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}```