根据Nginx的官方文档,Location标签包含以下修饰符,分别是:
(1) =:表示完全匹配;
#nginx配置
location = /11 {
return 400;
}
location = /11/22 {
return 401;
}
浏览器输入:http://ip:port/11/
返回:400
浏览器输入:http://ip:port/11/22
返回:401
浏览器输入:http://ip:port/11/22/33
返回:An error occurred.Sorry, the page you are looking for is currently unavailable.
Please try again later.
(2) ^~:匹配URI的前缀,匹配最长的规则;
#nginx配置
location ^~ /11 {
return 400;
}
location ^~ /11/22 {
return 401;
}
浏览器输入:http://ip:port/11/
返回:400
浏览器输入:http://ip:port/11/22
返回:401
浏览器输入:http://ip:port/11/22/33
返回:401
(3) ~:匹配正则表达式,大小写敏感,匹配最先出现的规则;
#nginx配置
location ~ /aa {
return 400;
}
location ~ /aa/bb {
return 401;
}
浏览器输入:http://ip:port/aa/
返回:400
浏览器输入:http://ip:port/aa/bb
返回:400
浏览器输入:http://ip:port/aA
返回:404 Not Found
(4) ~*:匹配正则表达式,大小写不敏感,匹配最先出现的规则;
#nginx配置
location ~* /aa {
return 400;
}
location ~* /aa/bb {
return 401;
}
浏览器输入:http://ip:port/aa/
返回:400
浏览器输入:http://ip:port/aa/bb
返回:400
浏览器输入:http://ip:port/aA
返回:400
(5) /:通用匹配,匹配最长的规则。
#nginx配置
location /11 {
return 400;
}
location /11/22 {
return 401;
}
浏览器输入:http://ip:port/11/
返回:400
浏览器输入:http://ip:port/11/22
返回:401
浏览器输入:http://ip:port/11/22/33
返回:401
优先级:(1)> (2) > (3) = (4) > (5)
完全匹配的优先级最高,其次是路径匹配,然后是正则匹配,最后是通用匹配。
nginx接受request请求后,先判断该请求属于哪一个优先级。确认好优先级后按照各优先级内匹配规则进行判断。