nginx转发但更改位置上下文

时间:2016-02-26 16:50:06

标签: nginx proxy forward

我希望Nginx代理多个网站。 使用<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="test-module" ng-controller="main-controller"> <input type="button" value="click" ng-click="somethingWasClicked()"> </div>site1.someIpsite2.someIpsomeIp/site1

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

someIp/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:somePortsomeIp:1111,但这不是一个很好的解决方案。

  • 我想以某种方式不转发匹配的位置
  • 或使用mysite.someIp:somePort(但不确定如何实现)

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

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

someIP:2222

location /first { proxy_pass http://someip:somePort/; } 之后添加最后/非常重要,但会导致与无法访问CSS相同的问题。当应用程序(https://concourse-ci.org/)在somePort/提供时,CSS似乎无法访问。如果location设置为localIp:somePort/public,这不是问题,但是我想使用上述两种方法之一以良好的方式代理多个服务,而不是使用不同的端口映射到/。 / p>

1 个答案:

答案 0 :(得分:1)

您可以重写URI:

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

或者,您可以将/ first块设为regex,将proxy_pass设置为$ 1(使用相同的正则表达式),例如:

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