Nginx location匹配
location语法 location [=|~|~|^~] /url/ { … } 注:uri是指匹配路径, [ =| ~ | ~ | ^~ | @ ] 是指匹配规则(可选)
= : 完全匹配,表示精确匹配后面的url ^~ : 无正则普通匹配( ^ 表示“非”,~ 表示“正则”,字符意思是:不会继续匹配正则),表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录 / : 普通匹配(/xxx) ~ : 表示正则匹配,区分大小写 ~* : 表示正则匹配,不区分大小写 @ : “@” 定义一个命名的 location,使用在内部定向时,例如 error_page
= 进行普通字符精确匹配。也就是完全匹配。 ^~ 前缀匹配。如果匹配成功,则不再匹配其他location。 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 /xxx/ 常规字符串路径匹配 / 通用匹配,任何请求都会匹配到
1. 匹配的先后顺序
- = 前缀的指令严格匹配这个查询,优先级最高,一旦匹配成功,则停止搜索其他localtion的匹配项;
- 所有剩下的常规字符串(^~和普通匹配),‘最长命中’规则,优先使用匹配最长的结果。
- 正则表达式,在配置文件中定义的顺序
注: ^~ 和普通匹配。使用前缀匹配,不支持正则表达式,如果有多个location匹配成功的话,不会终止匹配过程,会记忆表达式最长的那个,如果得到的最长的location为 ^~ 类型,则表示阻断正则表达式,不再匹配正则表达式。如果得到的最长的location不是 ^~ 类型,继续匹配正则表达式,只要有一个正则成功,则使用这个正则的location,立即返回结果,并结束解析过程。
location = / {
# 精确匹配/,主机名后面不能带任何字符串 /
[ configuration A ]
}
location / {
# 匹配所有以 / 开头的请求。
# 但是如果有更长的同类型的表达式,则选择更长的表达式。
# 如果有正则表达式可以匹配,则优先匹配正则表达式。
[ configuration B ]
}
location /documents/ {
# 匹配所有以 /documents/ 开头的请求,匹配符合以后,还要继续往下搜索。
# 但是如果有更长的同类型的表达式,则选择更长的表达式。
# 如果有正则表达式可以匹配,则优先匹配正则表达式。
[ configuration C ]
}
location ^~ /images/ {
# 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找,停止搜索。
# 所以,即便有符合的正则表达式location,也不会被使用
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif jpg jpeg结尾的请求。
# 但是 以 /images/开头的请求,将使用 Configuration D,D具有更高的优先级
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,还会继续往下搜索
[ configuration F ]
}
location = /test.htm {
root /usr/local/var/www/htm;
index index.htm;
}
https://blog.csdn.net/beichengliulixue/article/details/121971227 https://zhuanlan.zhihu.com/p/389438482