2016-04-21 16:44:45 0 评论 CDN Boy.Lee

使用PHP和Nginx控制CDN刷新时间

在Web开发中, 我们经常会把图片文件, Css文件, JS文件放到CDN服务器上来实现快速加载, 这是CDN的一个优势, 也是我们需要的, 但是经常会遇到一个情况: CDN刷新总是需要很久, 这种非可控刷新会让开发人员很头疼, 这里提供一种通过PHP+Nginx的方法来实现CDN强制瞬间刷新, 并且对其他特性没有影响.

 

{规划篇}

//普通
URL:http://r.yiilib.com/site/css/main.css

//强制刷新
URL:http://r.yiilib.com/site/css/v001/main.css

可以看出差别在于我们把版本号v001放到了url里面, 那么当CDN计算的时候会默认为v001/main.css 和 v002/main.css两个文件, 通过这样的原理就可以实现CND刷新时间控制了, 下面来看PHP和Nginx如何实现

 

{PHP篇}

$versionNum = 'v001';

  <link rel="stylesheet" type="text/css" href="http://r.yiilib.com/site/css/<?php echo $versionNum; ?>/main.css">

 

{Nginx篇}

location ~^/(css|js)/v.*/.*(css|js)$ {
    rewrite ^(/(css|js)/)v.*/(.*)$ $1$3 break;
}

对应关系: 

location ~^/(css|js)/v.*/.*(css|js)$ => 找到 /css/v001/main.css

$1 => (/(css|js)/) => /css/
$2 => (css|js) => css
$3 => (.*) => main.css

$1$3 => /css/main.css

 

{CDN篇}

找到老的files并删除掉即可, 搜索 /css/v001 找到001版本对应的文件删除

 

{优劣分析}

优势: 快速CDN刷新, 无需等待, 对项目初期开发有非常大的帮助

劣势: 需要手动删除文件, 每次更新都要手动修改版本号

 

{总结}

还是比较推荐这样做的, 随心所欲的刷新CDN, 基本做到了鱼与熊掌.

如果有更好的方式或Bug欢迎留言