location的优先级和执行顺序

背景

作为一个phper每次用nginx配置项目的时候都是从网上找一段配置改一改用,总会用到各种未知的问题,决定将常用的配置记录一下便于查找

location的分类

1.指定uri地址。这个平时配置用到的比较多
location [ = | ~ | ~* | ^~ | !~ | !~* | /] uri {
}
2.指定自定义名称。经常被try_uri 指令用到
location @name {
}

指定uri地址

精准匹配,只有访问的uri和配置的完全一致时才能匹配到

location = / { # 只有主机后边不带任何路径才能被匹配到
}

前缀匹配,

1.普通前缀匹配。内部优先级为最长匹配,匹配到最长匹配之后还会找特殊前缀匹配
location /test {
return 403;
}
location /test/test.txt {
return 405;
}
请求:/test/test.txt 会返回 405;/test/aa 返回403;这里是匹配最长的跟配置顺序无关

  1. 特殊前缀匹配。内部优先级为最长匹配,匹配到最长的前缀匹配之后就不会再寻找正则匹配了
    location ^~ /test {
    return 403;
    }
    location ^~ /test/test.txt {
    return 405;
    }
    请求:/test/test.txt 会返回 405;/test/aa 返回403;这里是匹配最长的跟配置顺序无关

正则匹配

正则匹配之间的匹配顺序跟配置顺序有关,配置在前边的正则的优先级高于配置后边的所以在配置的时候应该将详细的正则放在前边,粗略的放在后边
1.~ 区分大小写的正则匹配
location ~ /test {
return 403;
}
location ~ /test/test.txt { # 这样写,这个永远匹配不到,
return 405;
}

  1. ~* 不区分大小写的正则匹配
  2. !~ 第一种的取反
  3. !~* 第二种的取反

优先级

精准匹配(=)> 特殊前缀匹配(^~)> 正则匹配 > 普通前缀匹配

你可能感兴趣的:(location的优先级和执行顺序)