JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

一张图搞明白Nginx的 / 和 ^~ / 匹配的相同点和不同点

wys521 2024-09-29 23:23:38 精选教程 83 ℃ 0 评论

相同点

  • 都可以匹配任何以 /xxx 开头的请求 URI
  • 都会根据用户请求的URL继续在配置中查找,直到找到最长匹配的;但是如果过程中有正则匹配的时候 /xxx会立即停止,但 ^~ /xxx不会

不同点

优先级不同:

  • /xxx 会低于 ^~ /xxxx
  • /xxx 会低于 正则匹配
  • ^~ /xxxx 会高于正则匹配

例子

例1:查找最长匹配

比如用户访问URL为 /api/front/doc/info

nginx 配置如下

location /api {}
location /api/front {}
location /api/front/doc {}
location /api/front/software/info {}

nginx会先找到 /api的 location;但是会继续去配置中查找,然后找到/api/front的location;然后依次类推最后找到最长的即 location /api/front/doc {}

例2:/xxx 低于 正则匹配

用户请求URL为 /api/font/doc/info

配置如下

location ^~ /api {
return 200 "<html><body>^~ /api </body></html>";
}
location ^~ /api/front {
return 200 "<html><body>^~ /api/front </body></html>";
}
location /api/front/doc {
return 200 "<html><body>^~ /api/front/doc</body></html>";
}
location ~* /api/.* {
return 200 "<html><body>/api</body></html>";
}

虽然 /api/front/doc 是最长匹配的,但因为有正则 ~* /api/.* 匹配了,所以nginx会采用

location ~* /api/.* {
return 200 "<html><body>/api</body></html>";
}

例3:^~ /xxxx 会高于正则匹配

例3:用户请求URL为 /api/font/doc/info

配置如下

location ^~ /api {
return 200 "<html><body>^~ /api </body></html>";
}
location ^~ /api/front {
return 200 "<html><body>^~ /api/front </body></html>";
}
location ^~ /api/front/doc {
return 200 "<html><body>^~ /api/front/doc</body></html>";
}
location ~* /api/.* {
return 200 "<html><body>/api</body></html>";
}

这里Nginx会采用 location ^~ /api/front/doc 因为 ^~ 的匹配符会比正则的匹配优先级高

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表