nginx之线上CDN的rewrite规则修改
线上的CDN厂商的nginx的rewrite规则配置验证
环境介绍:
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
nginx服务是编译安装:
验证测试:
为使nginx vhost虚拟主机配置文件更简洁,所以采用include方式,把nginx的rewrite规则写到一个单独的配置文件中
** 下面的rewrite规则是云端CDN的提供的配置规则,但是其中3条规则存在问题**
本人亲自测试最合理的配置文件的规则如下:
基于CDN提供的原*nginx rewrite规则顺序逐一进行实例演示:
规则1
说明:
正常的浏览器访问:
通过匹配到rewrite规则 浏览器访问:
服务器上文件的位置:
规则2:
说明:
实例演示:
规则3:
说明:
实例演示:
http://img.test.com/uploads/picture/2016/07/28/1469696883.jpeg
http://img.test.com/cHrtwK123/0728/1469696883.jpeg
http://img.test.com/cHrtwK1234/0728/1469696883.jpeg
http://img.test.com/cHrtwK4/0728/1469696883.jpeg??base64
规则4:
说明:
实例演示:
以下这样的是不符合规则的,所以找不到文件
规则5:
说明:
实例演示:
经测试,此rewrite规则放到此位置,是匹配不到图片的,所以位置得变动下,把此规则放到规则的首位就可以了
规则6:
注意:此处的点号是不需要转译的,转译会导致rewrite规则不可用,就如下面的这条rewrite规则是不正确的
实例演示:
规则7:
实例演示:
下面的请求是打不开的
http://img.test.com/1345/0728/1469696883.jpeg
http://img.test.com/1232345/0803/1661442694.jpg
http://img.test.com/66/0803/1661442694.jpg
于是把第七条规则放到第四条规则:rewrite “^/.{6}[0-9]+/([0-9]{2})([0-9]{2})/(.*)$” /uploads/picture/2016/$1/$2/$3 ; 前面进行
测试
下面的请求都是可以打开的
规则八:
让我们继续看下本人亲自测试的文件:
如果把#rewrite ^/[a-zA-Z0-9]+/(.*)$ /uploads/picture/$1 last; 注释掉的规则放到第一条规则后面的任意位置进行测试
于是干脆去掉注释放到第一条规则rewrite “^/.{6}[0-9]{4}[0-9]{8}/(.*)$” /uploads/picture/$1 last;的前面进行测试:
以下链接都可以正常的显示图片了:
但是接着有发现:
相对路径的访问请求此时却打不开了,报错404,于是尝试把此规则放到其他规则的后i面进行测试,发现相对路径的访问请求都是不好使的。
于是注销掉此规则,下面的相对路劲的访问链接是又可以打开了
规则九:随意指定括号,但是括号内表达的字符范围必须是服务器上真实存在的
服务器文件存放路径:/data/www/images/uploads/picture/2016/03/05
允许请求后缀包含数字的同时包含3个字母
** 下面是可以正常访问的链接:**
** 允许请求后缀包含数字的同时包含3个字母和2个数字:**
** 下面是可以正常访问的链接:**
```
http://p.ccctt.com/MjExNw1110304/1345674534sdC21.png
http://p.ccctt.com/MjExNw1110304/1345674534sdC11.png
rewrite “^/([a-zA-Z0-9]+)([0-9]{2})([0-9]{2})/([0-9]+)([A-Za-z]+)(.|)(png|jpeg|jpg|gif)$” /uploads/picture/2016/$2/$3/$4.$7 last;
http://p.ccctt.com/MjExNw1110304/1345674534sdce.png
http://p.ccctt.com/MjExNw1110304/1345674534s.png