Nginx位置,正则表达式在路径中间



我正在尝试配置 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";
}

最新更新