概述: 在nginx中,匹配分很多情形,例如:区分大小写匹配、不区分大小写匹配、有强匹配开头、有模糊匹配某些字符、有匹配后重写动作、有匹配反向代理动作、有匹配后终止操作、还有匹配全局变量类型等等,在很多情形中,匹配动作也存在优先策略,来看看下面的案例。
案例一、
server {
......
............
location ~ .*.(jpg|png)$ {
root /opt/nginxtest;
expires 1d;
#deny all;
}
}
说明:
1、以上location匹配了所有jpg与png文件,如果该location中没有指定root,将继承server段中的root配置,如果有指定root,location中的root优先;
2、location中无论有没有指定root ,deny all如果启用,将优先生效,由此可判断,只要类型为jpg与png文件,必定会进入此location中;
案例二、
server {......
............
location ~ ^/upload/.*.(jpg|png)$ {
rewrite ^/upload/(.*).png /test/upload/d1/$1.png permanent;
#root /opt/nginxtest/d1;
}
}
说明:
1、此规则限定与强匹配了$host 的/后,以upload开头,并且请求类型为jpg与png结尾的文件;
2、执行重写,强匹配以上1规则后进入rewrite , 例如http//$host/upload/1/123.png 将会到http//$host/test/upload/d1/1/123.png ;
3、如果该location中没有指定root,将继承server段中的root配置,如果有指定root,location中的root优先;
案例三、
server {......
............
location ~ /(upload|test)/.*.(jpg|png)$ {
rewrite ^/upload/(.*).jpg /d1/$1.jpg permanent;
rewrite /upload/(.*).png /d1/$1.png permanent;
#root /opt/nginxtest/d1;
}
}
说明:
1、此规则模糊匹配$uri,请求中包含upload或test即可继续执行,并且请求类型为jpg与png结尾的文件;
2、执行重写,匹配以上1规则后进入rewrite , 但需要注意,此处jpg与png类型不同,并且jpg中是强匹配^/,而png是模糊匹配,例如:http//$host/upload/1/123.png 将会到http//$host/d1/1/123.png ;例如:http//$host/test/upload/1/123.jpg 将会到 /opt/nginxtest/test/d1/121.png拿取文件;
3、而http//$host/test/d1/121.png的请求会直接拿取/opt/nginxtest/test/d1/121.png文件,因为此location虽然进来了,但没有匹配到重写规则,还是一样,如果该location中没有指定root,将继承server段中的root配置,如果有指定root,location中的root优先;
案例四、
server {......
............
location ~ /upload/.*.(gif|jpeg)$ {
if ( $request_uri ~* "myid" ) {
rewrite ^/upload/(.*).jpeg$ /jpeg/$1.jpeg permanent;
}
#deny all;
#root /opt/nginxtest/d1;
}
}
说明:
1、此规则模糊匹配$uri,请求中包含只要upload,并且请求类型为jpg与png结尾的文件即可继续执行;
2、执行重写,匹配以上1规则后进入判断$request_uri 和执行rewrite , 注意jpeg中是强匹配^/ 接upload, 且 $request_uri 带有“myid” , 则rewrite , 例如: http//$host/upload/1/123.jpeg?myid=123 将会到 http//$host/jpeg/1/123.jpeg?myid=123 ; 例如 http//$host/upload/1/123.jpeg 将会直接拿取/opt/nginxtest/upload/1/121.png文件,注意,如果此location中指定了root则取此root,如果没有则取server段中的root;
3、此location中,如果$request_uri 匹配,则优先rewrite , 同时启用deny all , root ,则deny 生效;
留言与评论(共有 0 条评论) “” |