nginx 转发但更改位置上下文

nginx forward but change location context

我想让多个站点由 Nginx 代理。 使用 site1.someIpsite2.someIpsomeIp/site1someIp/site2

当我尝试使用以下设置实现此目的时:

server{
        listen 80;
        listen [::]:80;

        location /first {
                proxy_pass http://localThing:somePort;
        }

        location /second {
                proxy_pass localThing2;
        }
}

它导致 /first 转发到 http://localThing:somePort/first 但实际上,我只想转发到 http://localThing:somePort

目前,我使用多个服务器监听不同的端口,例如someIp:1111someIP:2222 但这不是一个很好的解决方案。

@jdewald 友善地提供的答案是一个很好的开始,因为 HTML 被转发了,而不是 CSS。

到目前为止我注意到它可以简化为

location /first {
    proxy_pass http://someip:somePort/;
}

somePort/ 之后添加最后一个 / 很重要,但会导致与 CSS 无法访问相同的问题。 CSS 似乎无法访问,因为应用程序 (https://concourse-ci.org/) 正在 localIp:somePort/public 为其提供服务。如果位置设置为 /,这不是问题,但因为我想使用上述两种方法之一以一种很好的方式代理多个服务,而不是使用不同端口映射到 /

您可以重写 URI:

location /first {
    rewrite ^/first(.*)$  break;
    proxy_pass http://someip:somePort;
}

或者你可以让 /first 块是一个正则表达式和 proxy_pass 到 $1(使用相同的正则表达式),例如:

location ~ ^/first(.*) {
    proxy_pass http://someip:somePort;
}