上一篇文章分享了WordPress 发布文章评论自动刷新腾讯云 CDN 的教程,而博客现在还用到了 VeryCloud 的 CDN,正好有朋友在文章后面留言说 VC 也有刷新缓存的 API,于是就利用中午的时间折腾了下,成功搞定!
下面分享一下部署方法。
/** * WordPress 发布/更新文章、提交/审核评论自动清理 VeryCloud CDN 缓存(首页、分类以及当前文章) By 张戈博客 * 文章地址:https://zhang.ge/5090.html * 转载请保留出处,谢谢合作! **/ //发布、更新文章刷新缓存 add_action('publish_post', 'refresh_By_Publish', 0); //提交评论刷新缓存 add_action('comment_post', 'refresh_By_Comments',0); //审核评论刷新缓存 add_action('comment_unapproved_to_approved', 'refresh_By_Approved',0); define('CRYPT_SALT', 'verycloud#cryptpass'); $cdn_provider = array( "verycdn" => array( "push" => "https://api3.verycloud.cn/API/cdn/refresh", "token" => "https://api3.verycloud.cn/API/OAuth/authorize", "username" => "此处填写 verycloud 用户名", "password" => "此处填写 verycloud 密码", ), ); //发布文章更新文章、分类和首页的缓存函数 function refresh_By_Publish($post_ID) { $pageurl = get_permalink($post_ID); $homeurl = home_url(); $category = get_the_category(); if($category[0]){ //如果文章属于多个分类,默认只刷新第一个分类地址 $caturl = get_category_link($category[0]->term_id ); $url = $pageurl . ',' . $caturl . ',' . $homeurl; } else { $url = $pageurl . ',' . $homeurl; } $data = array( 'type' => 'file', 'urls' => $url ); refresh($data); } //提交评论刷新当前文章 CDN 缓存 function refresh_By_Comments($comment_id) { $comment = get_comment($comment_id); $url = get_permalink($comment->comment_post_ID); $data = array( 'type' => 'file', 'urls' => $url, ); refresh($data); } //审核评论刷新当前文章 CDN 缓存 function refresh_By_Approved($comment) { $url = get_permalink($comment->comment_post_ID); $data = array( 'type' => 'file', 'urls' => $url, ); refresh($data); } function post_data($url, $data, $type = "POST") { $ch = curl_init(); // 使用 TLS1.0 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 1 ); curl_setopt($ch, CURLOPT_POST, true); if ( $type == "POST" ) { $parm_string = http_build_query($data, '&'); curl_setopt($ch, CURLOPT_POSTFIELDS, $parm_string); } else { curl_setopt($ch, CURLOPT_POSTFIELDS, $data); } $output = curl_exec($ch); curl_close($ch); return $output; } //生成 tokens function get_verycdn_token() { global $cdn_provider; $post_data["username"] = $cdn_provider["verycdn"]["username"]; $post_data["password"] = encrypt($cdn_provider["verycdn"]["password"]); $res = post_data($cdn_provider["verycdn"]["token"], $post_data); $result = json_decode($res); return $result->access_token; //var_dump($post_data); //var_dump($result); } function encrypt($txtStream) { //以下行中的字符串可能需要找客服提供,具体请自行试试。 $lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdefIJK6/7nopqr89LMmGH012345uv'; $lockLen = strlen($lockstream); $lockCount = rand(0, $lockLen-1); $randomLock = $lockstream[$lockCount]; $password = md5(CRYPT_SALT . $randomLock); $txtStream = base64_encode($txtStream); $tmpStream = ''; $i = 0; $j = 0; $k = 0; for($i = 0; $i < strlen($txtStream); $i++) { $k = ($k == strlen($password)) ? 0 : $k; $j = (strpos($lockstream, $txtStream[$i]) + $lockCount + ord($password[$k])) % ($lockLen); $tmpStream .= $lockstream[$j]; $k++; } return $tmpStream . $randomLock; } /** * 提交刷新 * @param $data * @return array */ function refresh($data) { global $cdn_provider; $token = get_verycdn_token(); if(!$token) { return array( 'code' => 0, 'message' => 'unable to get token' ); } //刷新类型 file 文件 dir 目录 $type = isset($data['type']) && !empty($data['type']) ? trim($data['type']) : ''; //刷新 url $urls = isset($data['urls']) && !empty($data['urls']) ? $data['urls'] : ''; //url 分隔符,多个 url 使用该符号分隔,默认, $partition = isset($data['partition']) && !empty($data['partition']) ? trim($data['partition']) : ','; if(empty($type) || empty($urls)) { return array( 'code' => 0, 'message' => 'type and urls are required', ); } $url = $cdn_provider["verycdn"]["push"]; $send_data = array( 'token' => $token, 'type' => $type, 'urls' => $urls, 'partition' => $partition ); $return = post_data($url, $send_data); return $return; }
将以上代码粘贴到 WordPress 主题 functions.php 中,然后将 19,20 行对应的中文改成 VeryCloud 的用户名和密码,保存即可。
Ps:貌似 VC 的缓存刷新 API 暂时还没完全公开,如果需要部署这个功能,需要联系客服,然后告知需要使用这个刷新 CDN 缓存的 API,然后提供以下用户名给他就好了。而且代码中的 lockstream 的值可能需要 VC 客服提供,如果发现上述代码无法成功,请自行咨询 VC 客服。
部署好了之后,可以去更新文章或提交评论,然后登陆 VeryCloud 云分发后台,即可看到提交记录:
至此,说明你已部署成功。
CDN的好处太多了,防攻击,加速,减少带宽压力,省钱。
我之前问,说API只对企业开放,估计个人的话,要量大的才给用
可能现在又放开了吧,我找客服立马就给了。
:roll: 博客可以分享一下如何可以同时使用多个CDN不?
域名解析那根据线路解析到不通CDN即可,比如电信、联通、移动啥的,自己去琢磨。
好的,我去琢磨琢磨。
就是说。。你要先测试出百度,360等各cdn的线路用移动,电信,联通,等宽带访问的速度最快,然后到dns管理的地方,分别为各个宽带设置一条线路即可
CDN不是很懂
WordPress最烦的就是发布、提交、审核评论这些需要手动的清理缓存才能显示出来,特别的麻烦,有了博主的分享,就方便多了
给力的说
张哥,verycloud你用的感觉怎么样?
我现在就是VC,没啥异常,总体可以的。
很快的速度 我也折腾折腾
戎美慢时光快时尚的博客
http://blog.sina.com.cn/u/5785825510
初步接触,还在山脚转悠,楼主已经快到山顶了,仰望着!
以后有不懂的地方还要请教博主,望不吝赐教!
如何centos开机启动qrsbox
cd /usr/local/qrsbox
./qrsboxcli sync &
非常希望老师可以帮忙下,弄了2天就是不能自动启动
加入到 /etc/rc.d/rc.local 文件即可
echo "/usr/local/qrsbox/qrsboxcli sync &" >> /etc/rc.d/rc.local
很好的文章,不错,谢谢分享
虽然不懂,也要支持一下!
可以私人使用?我去试试运气
戈兄,verycloud的缓存如何不缓存后台,问了客服不支持*通配符黑名单,也就是你百度加速的规则admin*不行,求教你是怎么设置的。还有为什么戈兄不继续用百度云加速了呢,而转用verycloud... 谢谢...
百度云加速不支持https
你新增一个规则:
不缓存 /wp-admin/
就好了
看看,学学,理解理解。
不知道能不能来个怎么做博客网站的文章 谢谢了
请问戈老大,阿里云该如何自动更新呢?有什么教程之类的吗,谢谢!
最近腾讯的cdn好像有点问题,发工单也找不出结果,只能临时换了 :twisted:
目前 貴博客已經部署了麼?
张哥,昨天我启用了CDN,跟你学的腾讯云和VeryCloud,可是发现站长统计把我自己的后台操作也统计出来了,这怎么搞?按理说这不是应该在页面插入了cnzz统计代码才会统计的到吗,有点不解。
我竟无言以对,CDN和站长统计能有啥关系?还是从页面代码排查吧
额。。。感冒了,有点晕乎。重新看了下,发现看错了,统计到的是后台跳到前台的链接,我看成后台之间的链接了。。。白痴了一回 :???:
很明显不可能有关系。
嗯嗯,还不太放心全站CDN,有点紧张过度了,谢谢张哥。还有就是想知道怎么检查wp-admin目录有没有被CDN缓存? :?:
看上去挺爽的,Jager你的博客缓存是怎么设置的?
这个是不错的哦
VeryCloud 现在已不能提供API 接口了,官方回复了,不能申请了,
大神 能否提供下阿里云CDN的教程呢?
求阿里云CDN配置
请问张老师可以费心写个阿里云cdn的么,速度还是不错的,除了https请求数还得另收费
张大师,我发现所有用VeryCloud的网站都无法缓存/或子目录,比如访问www.iotfen.com是miss的,而www.iotfen.com/index.html就能hit,同理www.iotfen.com/a/ 是miss的,而www.iotfen.com/a/index.html能hit,请教有没有办法解决这一难题,没有人打域名后面还加上index.html的
不是回复了你吗?换个马甲又来了。。。
https://zhang.ge/liuyan.html
刚申请的头像,显摆一下。 :grin: 缓存首页后,站内搜索功能失效了。对了,我是手机访问的这条留言,电脑端f5不出来。
把搜索功能弄成伪静态,然后在CDN排除下即可
不错,虽然不太懂
签到成功!签到时间:下午1:23:30,每日签到,生活更精彩哦~
签到成功!签到时间:21:17:02,每日签到,生活更精彩哦~
这小玩意儿有意思
多谢戈哥!!!经17年4月20日测试VC的API仍能正常使用,大赞一个!
悲催的,好像现在不给API了,囧!