根据 URL 子路径反向代理到不同位置
Reserve proxy to different locations based on URL subpath
根据传递的参数,我有不同的服务来处理 URL 的不同部分
服务 offer
将处理路由 /offer/44
和其他路由,例如 /offer/44/calculator
以下代码成功处理了该路由。
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/ break;
proxy_pass http://localhost:4000/;
}
}
但是当我有 url /offer/44/payments/*
并且应该通过另一个服务路由时,我的额外复杂层就来了
我尝试了很多不同的嵌套位置变体,但似乎对 payments
没有任何效果。尝试做类似下面的事情(重定向现在是基本的,因为我只是试图让它只是重定向......但理想情况下我希望它在 payment
之后接受所有内容并将其放入其他服务 URL)
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/ break;
proxy_pass http://localhost:4000/;
}
#my ideal /offer/44/payments/*
location ^/offer/([0-9]+)/payment/(.*)$ {
proxy_pass http://payment-docker.local:20000/init;
}
}
所以我的问题是:我如何使本地嵌套工作,以便如果它在 offer
之后看到单词 payments
,它 proxy_pass 到另一个服务?
更新:
让它更简单
我尝试过的一些事情
好像nginx
不喜欢的是数字
有效
# Example URL = http://localhost/offer/
location ^~ /offer/ {
proxy_pass http://payment-docker.local:20000/init;
}
这行不通。一旦有数字正则表达式,它总是 returns 404
# Example URL = http://localhost/offer/3
location ^~ /offer/([0-9]+) {
proxy_pass http://payment-docker.local:20000/init;
}
# Example URL = http://localhost/offer/33
location ^~ "/offer/[\d]{2}" {
proxy_pass http://payment-docker.local:20000/init;
}
你能试试这个吗?据我所知,nginX 使用最长的正则表达式匹配位置。
location /offer {
rewrite ^/offer/(.*)$ /offer/ break;
proxy_pass http://localhost:4000/;
}
#my ideal /offer/44/payments/*
location ~ ^/offer/([0-9]+)/payment/(.*)$ {
rewrite ^/offer/([0-9]+)/payment/(.*)$ /init/payment/ break;
proxy_pass http://payment-docker.local:20000;
}
根据传递的参数,我有不同的服务来处理 URL 的不同部分
服务 offer
将处理路由 /offer/44
和其他路由,例如 /offer/44/calculator
以下代码成功处理了该路由。
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/ break;
proxy_pass http://localhost:4000/;
}
}
但是当我有 url /offer/44/payments/*
并且应该通过另一个服务路由时,我的额外复杂层就来了
我尝试了很多不同的嵌套位置变体,但似乎对 payments
没有任何效果。尝试做类似下面的事情(重定向现在是基本的,因为我只是试图让它只是重定向......但理想情况下我希望它在 payment
之后接受所有内容并将其放入其他服务 URL)
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/ break;
proxy_pass http://localhost:4000/;
}
#my ideal /offer/44/payments/*
location ^/offer/([0-9]+)/payment/(.*)$ {
proxy_pass http://payment-docker.local:20000/init;
}
}
所以我的问题是:我如何使本地嵌套工作,以便如果它在 offer
之后看到单词 payments
,它 proxy_pass 到另一个服务?
更新:
让它更简单
我尝试过的一些事情
好像nginx
不喜欢的是数字
有效
# Example URL = http://localhost/offer/
location ^~ /offer/ {
proxy_pass http://payment-docker.local:20000/init;
}
这行不通。一旦有数字正则表达式,它总是 returns 404
# Example URL = http://localhost/offer/3
location ^~ /offer/([0-9]+) {
proxy_pass http://payment-docker.local:20000/init;
}
# Example URL = http://localhost/offer/33
location ^~ "/offer/[\d]{2}" {
proxy_pass http://payment-docker.local:20000/init;
}
你能试试这个吗?据我所知,nginX 使用最长的正则表达式匹配位置。
location /offer {
rewrite ^/offer/(.*)$ /offer/ break;
proxy_pass http://localhost:4000/;
}
#my ideal /offer/44/payments/*
location ~ ^/offer/([0-9]+)/payment/(.*)$ {
rewrite ^/offer/([0-9]+)/payment/(.*)$ /init/payment/ break;
proxy_pass http://payment-docker.local:20000;
}