使用具有冲突和重叠路径名的正则表达式

使用具有冲突和重叠路径名的正则表达式

考虑以下正则表达式,我试图将格式的请求路由/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;
    }
}

其余位置是前缀位置,因此块的顺序无关紧要。

相关内容