前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Nginx结构全解析(39)

Nginx结构全解析(39)

原创
作者头像
陈不成i
修改2021-05-12 18:04:41
修改2021-05-12 18:04:41
3130
举报
文章被收录于专栏:ops技术分享ops技术分享

1 匹配模式优先级

  1. location = /uri    =开头表示精确匹配,只有完全匹配上才能生效。
  2. location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,并且在正则之前。无正则普通匹配(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续匹配正则)
  3. location ~ pattern  ~开头表示区分大小写的正则匹配。!~为区分大小写不匹配的正则
  4. location ~* pattern  ~*开头表示不区分大小写的正则匹配。!~*为不区分大小写不匹配的正则
  5. location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
  6. location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。

注意: 前缀匹配,如果有包含关系时,按最大匹配原则进行匹配。比如在前缀匹配:location /dir1与location /dir1/dir2,如有请求http://localhost/dir1/dir2/file将最终匹配到location /dir1/dir2

优先级: (location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)

上述的优先级不完全正确

具体规则:

等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他location的匹配项

剩下的几种匹配优先级略复杂,具体可以参考Nginx文档(http://nginx.org/en/docs/http/ngx_http_core_module.html#location)

  • ^~和普通匹配。 使用前缀匹配,不支持正则表达式,如果有多个location匹配成功的话,不会终止匹配过程,会记忆表达式最长的那个。
  • 如果上一步得到的最长的location为^~类型,则表示阻断正则表达式,不再匹配正则表达式
  • 如果上一步得到的最长的location不是^~类型,继续匹配正则表达式,只要有一个正则成功,则使用这个正则的location,立即返回结果,并结束解析过程

“最长”命中

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 匹配模式优先级
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档