nginx 能匹配精准包含父子关系的 location 吗 ?

2020-10-26 20:09:35 +08:00
 jeesk

下面是两个 location,

location ~* ^/api/(blade-.*)|(ad-[0-9a-z]*-service)/ {  
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_buffering off;
           rewrite ^/api/(.*)$ /$1 break;
           proxy_pass http://fad_gateway;
}
         location ~* ^/fad-ssp/api/(blade-.*)|(ad-[0-9a-z]*-service)/ {
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_buffering off;
          rewrite ^/fad-ssp/api/(.*)$ /$1 ;
           proxy_pass http://ssp_gateway;
}
  1. 我需要 访问 localhost/api/ad-1-service/123 匹配到第一个 location,
  2. 我需要 访问 localhost/fad-ssp/api/ad-1-servic/123 匹配到第二个 location,

但实际情况下是, 我访问第 2 个地址的时候, 直接被第一个 location 匹配到了, 请问有什么办法分离吗 ?

1063 次点击
所在节点    问与答
11 条回复
Lax
2020-10-26 20:13:01 +08:00
匹配符号用错了,换成 ^~ 试试
jeesk
2020-10-26 20:21:07 +08:00
试了, 如果换成^~, 都不能匹配到了
Lax
2020-10-26 20:26:52 +08:00
把两条规则的先后顺序调整一下
jeesk
2020-10-26 20:31:28 +08:00
换了, 发现所有的 /api/ 的请求都走 /dsp-ssp/api/ 的匹配规则了
pubby
2020-10-26 20:35:41 +08:00
“|”的作用你理解错了吧
jeesk
2020-10-26 20:37:02 +08:00
@pubby 或者没毛病呀
jeesk
2020-10-26 20:41:23 +08:00
location ~* ^((?!fad-ssp))/api/(blade-.*)|(ad-[0-9a-z]*-service)/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://fad_gateway;
}
location ~* ^/fad-ssp/api/(blade-.*)|(ad-[0-9a-z]*-service)/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
rewrite ^/fad-ssp/api/(.*)$ /$1 break ;
proxy_pass http://ssp_gateway;
}
pubby
2020-10-26 20:41:25 +08:00
@jeesk 按你的需求应该是
/api/(x..... | y.....)/
bxb100
2020-10-26 20:46:30 +08:00
@pubby #8 正解
jeesk
2020-10-26 21:01:05 +08:00
正解, 解决了, 的确是正则表达式有问题
jeesk
2020-10-26 21:06:42 +08:00
@bxb100
@pubby 谢谢你们 2 位.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/718815

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX