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 生效;


 



本文标签: nginx 重写 案例分析 强匹配 模糊匹配

内容版权声明:【蓝色网居】部分资源来源于网络,如有侵犯您的所有权,请随时告知我们,我们将立即删除!感谢配合!

转载请注明出处:https://blog.ff56.cn/web/1657865504.html


【手机扫一扫查看文本】

手机扫一扫 手机扫一扫查看文本 手机扫一扫





访问控制 重写 cookie 404自定义 跳转rewrite 运算 定义404跳转 apache 跳转 ip白名单 ngx_cache_pu geoip $server_name try_files 恶意请求 请求频率 nginx插件 pass_proxy的使 或(or) referer限制 接口请求 $host large body 与(and) 强匹配 nginx $http_host 错误页 geoIP模块 白名单