NGINX 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
[ configuration E ]
}
匹配结果
URL | 匹配结果 | 原因 |
/ | configuration A | =优先级最高,匹配到结束 |
/index.html | configuration B | 路径匹配, |
/documents/document.html | configuration C | 第二个匹配到,往后继续匹配,发现第三个匹配最精确 |
/images/1.gif | configuration D | 同时匹配第二个,第四个,和第五个。但是由于优先级问题, |
/documents/1.jpg | configuration E | 同时匹配第二个,第三个,和第五个。第五个是正则表达式, |
优先级如下
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
注: ~ 和 ~*都是正则匹配 其中 ~* 不区分大小写 ~ 区分大小写
Nginx root 和 alias 的区别
nginx配置下有两个指定目录的执行,root和alias
例如有以下配置文件:
location /img/ {
alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~