我正在尝试配置 Nginx 以正确解析两个带有正则表达式的相似路径。
我有 2 项服务:
/- api/v1/myservice/{var}/client /
- api/v1/myservice/{var}/client/detail
{var} 是我正在读取的变量,它正在工作
这是我的代码(这里不使用变量(:
location ~ /api/v1/myservice/(.*)/client {
return 200 "service 1 ";
}
location ~ /api/v1/myservice/(.*)/client/detail {
return 200 "service 2";
}
当我像下面这样运行卷曲时:
curl http://localhost/api/v1/myservice/623723852/client/detail
我看到第一个位置的响应: "服务1">
我做错了什么? 谢谢
不需要像其他答案那样具有嵌套位置。NGINX中的嵌套位置经常给人一种关于指令继承的错误印象。通常情况下,它们不是继承的,因为NGINX无论如何都会选择一个特定的location
。出于这些原因,如果可以,请避免嵌套位置。
您可以简单地更改位置的顺序,以便更具体的位置排在最前面。NGINX将匹配配置中首先出现的那个(如果它们都匹配(:
location ~ /api/v1/myservice/(.*)/client/detail {
return 200 "service 2";
}
location ~ /api/v1/myservice/(.*)/client {
return 200 "service 1 ";
}
或者,稍微好一点(出于性能原因(,您可以调整正则表达式以进行更精确的匹配。那么配置中的位置就无关紧要了:
location ~ ^/api/v1/myservice/(.*)/client$ {
return 200 "service 1 ";
}
location ~ ^/api/v1/myservice/(.*)/client/detail$ {
return 200 "service 2";
}