nginx location配置规则

nginx location匹配是按照一定的规则优先级来进行的,就像运算符有优先级一样,所以并不是按照配置书写顺序来匹配的。具体优先级如下:

第一优先级:等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
第二优先级:^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
第三优先级:正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
第四优先级:常规字符串匹配类型。按前缀匹配。

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

location表达式类型:

~ 表⽰执⾏⼀个正则匹配,区分⼤⼩写
~* 表⽰执⾏⼀个正则匹配,不区分⼤⼩写
^~ 表⽰普通字符匹配。使⽤前缀匹配。如果匹配成功,则不再匹配其他location。
= 进⾏普通字符精确匹配。也就是完全匹配。
@ "@" 定义⼀个命名的 location,使⽤在内部定向时,例如 error_page, try_files

location uri正则表达式

  1. . :匹配除换行符以外的任意字符
  2. ? :重复0次或1次
  3. + :重复1次或更多次
  4. * :重复0次或更多次
  5. \d :匹配数字
  6. ^ :匹配字符串的开始
  7. $ :匹配字符串的结束
  8. {n} :重复n次
  9. {n,} :重复n次或更多次
  10. [c] :匹配单个字符c
  11. [a-z] :匹配a-z小写字母的任意一个
  12. (a|b|c) : 属线表示匹配任意一种情况,每种情况使用竖线分隔,一般使用小括号括括住,匹配符合a字符 或是b字符 或是c字符的字符串
  13. \ 反斜杠:用于转义特殊字符
  14. 小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。

优先级搜索问题:

不同类型的location映射决定是否继续向下搜索,等号类型、^~类型:一旦匹配上就停止搜索了,不会再匹配其他location了正则表达式类型(~ ~*),常规字符串匹配类型/xxx/ : 匹配到之后,还会继续搜索其他其它location,直到找到优先级最高的,或者找到第一种情况而停止搜索

猜你喜欢

转载自blog.csdn.net/sirria1/article/details/125060117