考虑以下正则表达式,我试图将格式的请求路由/customers/:id/products
到客户产品领域。
我把这个相互冲突的重叠规则序列中的第一个/customers
因为位置也接受而优先考虑/customers/1
有人可以帮助我解决以下路线吗,我是 nginx 新手。
server {
location /customers/[0-9]+/products {
proxy_pass http://customerproduct:3000
}
location /customers {
proxy_pass http://customer:3000;
}
location /products {
proxy_pass http://product:3000;
}
}
编辑
定影
location ~/customers/[0-9]+/products {
proxy_pass http://customerproduct:3000;
}
编辑2
修复 2。
server {
location ^/customers/[0-9]+/products {
proxy_pass http://customerproduct:3000
}
location ^/customers {
proxy_pass http://customer:3000;
}
location ^/products {
proxy_pass http://product:3000;
}
}
答案1
位置块的语法和评估顺序详细说明在手册页。
第一个位置块旨在使用正则表达式,需要~
或~*
运算符来指示这一点。此外,应与 URI 开头匹配的正则表达式应包含锚点^
。
例如:
server {
location ~ ^/customers/[0-9]+/products {
proxy_pass http://customerproduct:3000;
}
location /customers {
proxy_pass http://customer:3000;
}
location /products {
proxy_pass http://product:3000;
}
}
其余位置是前缀位置,因此块的顺序无关紧要。