nginx里面location的匹配规则和顺序
- 语法
location [=|~|~*|^~] uri {
...
}
- <empty>:普通前缀匹配
- = :精准匹配,uri必须完全一致
- ~ :区分大小写的正则匹配
- ~* :不区分大小写的正则匹配
- ^~ :非正则前缀匹配
- 规则
记住location分两类:
- 普通location:包括:
- 普通前缀匹配:'<empty>'
- 精确匹配:'='
- 非正则前缀匹配:'^~'
- 正则location: 包括:
- 区分大小写的正则匹配,'~'和
- 不区分大小写的正则匹配,'~*'
nginx按如下顺序操作:
检查所有的普通匹配,包括普通前缀匹配,精确匹配,和非正则前缀匹配
- 如果满足精确匹配,则直接使用精确匹配,停止。
- 如果不满足精确匹配,找出最长的前缀匹配
- 如果这条最长的前缀匹配是 非正则前缀匹配,那么使用这条最长的非正则前缀匹配,停止。
- 如果这条最长的前缀匹配是 普通正则匹配,那么从前往后检查所有正则匹配
- 如果存在任何一条正则匹配成功,那使用正则匹配,停止
- 如果没有任何正则匹配成功,则使用前面那条最长的普通前缀匹配。
所有有几点规则:
- 普通location的定义是顺序无关的。
- 精确匹配 会优先处理。
- 最长的普通匹配 会优先处理。
- 正则location的定义是顺序相关的。
- 谁在前面,谁会优先处理。
- 几个常用例子
location = / {
...
}
匹配到的uri是只有主机名,不含任何路径的请求。
location / {
...
}
这条基本就是缺省的规则了,任何请求都会进入这个规则,如果没有被其它规则拦截。
网友评论