nginx 转发但更改位置上下文
nginx forward but change location context
我想让多个站点由 Nginx 代理。
使用 site1.someIp
、site2.someIp
或 someIp/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:somePort
目前,我使用多个服务器监听不同的端口,例如someIp:1111
、someIP:2222
但这不是一个很好的解决方案。
- 我想以某种方式不转发匹配的位置
- 或使用 mysite.someIp:somePort(但不确定如何实现)
@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;
}
我想让多个站点由 Nginx 代理。
使用 site1.someIp
、site2.someIp
或 someIp/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:somePort
目前,我使用多个服务器监听不同的端口,例如someIp:1111
、someIP:2222
但这不是一个很好的解决方案。
- 我想以某种方式不转发匹配的位置
- 或使用 mysite.someIp:somePort(但不确定如何实现)
@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;
}