一、 location uri匹配符介绍
location = /uri
精确匹配,优先级最高
location ^~ /uri
以某个uri前缀开头的匹配,不支持正则表达式
location ~ /uri
表示区分大小写的正则匹配
!~表示区分大小写不匹配的正则
location ~* /uri
表示不区分大小的正则匹配
!~*表示不区分大小写不匹配的正则
location /uri
普通匹配,没有匹配模式,只有URL
location /
通用匹配,匹配不到时,会进行通用匹配
任何请求都会匹配
二、 location匹配符优先级顺序
首先匹配 "=" ,其次匹配 "^~" , 然后是按照配置文件中 "~"、"~*" 的顺序匹配 "~"、"~*" , 然后是进行普通匹配(/uri),如果最后匹配不到,则进行通用匹配("/")
正则匹配与配置文件location的顺序有关,其他匹配则没有顺序
正则匹配如果有多个匹配,则取最长匹配
匹配优先级: 精确匹配(=) > 前缀匹配(^~) > 正则匹配(~*|~) > 普通匹配 > 通配(/)
三、示例
location = / {
#精确匹配 ,匹配以后执行该location并停止匹配
[ configuration A ]
}
location / {
#所有都没有匹配到,则执行该location
[ configuration B ]
}
location /documents/ {
#当比它优先级高的没有匹配时,匹配任何以 /documents/ 开头的uri,此时才会被执行
[ configuration C ]
}
location ^~ /images/ {
#匹配任何以 /images/ 开头的uri,匹配符合以后执行该location并停止匹配
[ configuration D ]
}
location /images/ {
[ configuration E ]
}
location /images/abc {
[ configuration F ]
}
location ~ /images/abc/ {
[ configuration G ]
}
location ~* .(gif|jpg|jpeg)$ {
#匹配所有以 gif,jpg或jpeg结尾的请求,但不包含以/images/开头的uri
[ configuration H ]
}
请求localhost:80/则匹配到A
请求localhots:80/index.html则匹配到B
请求localhost:80/documents/document.html则匹配到C
请求localhost:80/images/都会匹配到D,其中EFG在此配置中无任何意义,匹配到EFG的都会优先匹配D
请求localhost:80/aaa/1.jpg则匹配到H