Nginx的location配置规则
种类
location 匹配规则分为
1.字符串匹配
2.正则匹配,正则匹配用字符 `~`,`~*`修饰。
顺序和优先级
首先查找字符串匹配的规则,找到最长字符串匹配也就是匹配度最高的字符串匹配,然后会记住这个选择,字符串匹配全部检查完之后,开始检查正则匹配,如果有正则匹配则选择正则匹配,如果没有正则匹配则选择前面记住的最长字符串匹配。但是有个特殊的规则^~
,如果字符串匹配有标记这个,则直接命中,不再检查正则匹配。
语法
语法:
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
示例
示例A:
error_page 500 502 503 504 /50x.html;
location = /50x.html {
echo 'my is 50X';
}
精确匹配规则,当请求uri遇到500或502或503或504状态码时候,输出
my is 50x
示例B:
location / {
echo 'all request';
}
匹配应用所有的请求规则
示例C:
location ~* \.(gif|jpg|jpeg)$ {
echo 'my is a image';
}
匹配所有的后缀为gif或jpg或jpeg,~*
表示不区分大小写,所以JPEG等也都是匹配的
示例D:
location ~ \.(gif|jpg|jpeg)$ {
echo 'my is a image';
}
匹配所有的后缀为gif或jpg或jpeg,~
表示区分大小写,所以JPEG等不匹配
示例E:
location /images/ {
echo 'match me1';
}
location ~ \.(gif|jpg) {
echo 'match me2';
}
如果请求,http://localhost/images/1.jpg
,会匹配第二个,也就是match me2
,
示例F:
location ^~ /images/ {
echo 'match me1';
}
location ~ \.(gif|jpg) {
echo 'match me2';
}
如果请求,http://localhost/images/1.jpg
,会匹配第一个,也就是match me1
,因为加了字符^~
之后,匹配到了之后,不再继续检查正则匹配。
官网示例:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
测试:
/ 请求 匹配A
/index.html 匹配B
/documents/document.html 匹配C
/images/1.gif 匹配D 此规则有加字符 ^~ 匹配到之后不再往下匹配
/documents/1.jpg 匹配E