我有不同的服务,这些服务将根据传递的参数来处理URL的不同部分
服务offer
将处理路由/offer/44
和其他路由,例如/offer/44/calculator
,以下代码将成功处理该路由。
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/$1 break;
proxy_pass http://localhost:4000/;
}
}
但是,当我拥有网址/offer/44/payments/*
时,我又会增加一层复杂性,然后应该将其路由到另一个服务中
我尝试了很多不同的嵌套位置变体,但似乎payments
无效。尝试执行以下操作(重定向是目前的基本操作,因为我正试图使其仅进行重定向...,但理想情况下,我希望它将payment
之后的所有内容都放入另一个服务URL中)
location ^~ /offer {
location ^~ /offer {
rewrite ^/offer/(.*)$ /offer/$1 break;
proxy_pass http://localhost:4000/;
}
#my ideal /offer/44/payments/*
location ^/offer/([0-9]+)/payment/(.*)$ {
proxy_pass http://payment-docker.local:20000/init;
}
}
所以我的问题是:如何进行本地嵌套工作,以便在payments
之后看到offer
一词,然后将其proxy_pass传递给另一个服务?
已更新:
使其更加简化
我尝试过的一些事情
nginx
不喜欢的是数字
这有效
# Example URL = http://localhost/offer/
location ^~ /offer/ {
proxy_pass http://payment-docker.local:20000/init;
}
这不起作用。一旦有数字正则表达式,它总是返回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;
}
答案 0 :(得分:0)
您可以尝试吗?据我所记得,nginX使用最长匹配来匹配正则表达式。
location /offer {
rewrite ^/offer/(.*)$ /offer/$1 break;
proxy_pass http://localhost:4000/;
}
#my ideal /offer/44/payments/*
location ~ ^/offer/([0-9]+)/payment/(.*)$ {
rewrite ^/offer/([0-9]+)/payment/(.*)$ /init/payment/$2 break;
proxy_pass http://payment-docker.local:20000;
}