博客在CDN是加了又下,下了又加。昨天訪問張戈博客學習的時候,感嘆大牛的站優化的就是好!驚嘆速度快之余發現張戈博客的服務器在國外,而且配置也不是很高。(優化出奇跡)
網站速度的提升無論對用戶體驗以及對seo都是極好的。在看看我這個1h1m的小弱雞。(搖頭搖頭)
實際上網站的訪問速度并不是完全依賴于去給服務器堆硬件配置,這方面就包含很多知識了。服務器地理位置距離、網站內部優化、不同運營商之間的線路解析、緩存cdn分發等等都決定著網站的速度。當然我們可以揚長避短,取長補短。
WordPress套一層CDN提升網站訪問速度。
cdn可以解決不同位置的文件分發問題,但我覺得優化wordpress網站速度主要還是靠cdn提供的緩存功能,
通過cdn控制臺設置緩存頁面內容,用戶直接訪問到的是cdn層的緩存,在結合cdn的跨區域分發。提速明顯!
為此,我把博客固定鏈接結構改成了/%post_id%.html,然后在cdn配置緩存,html頁面似乎更利于cdn緩存(這個我也不太懂,發現很多大佬都是這樣設置)
關于更改固定鏈接后之前的文章鏈接無法訪問,可以參考這篇文章:wordpress更改固定鏈接后舊鏈接301跳轉當前固定連接
wordpress更改固定鏈接后舊鏈接301跳轉當前固定連接
博客之前用固定鏈接是/archives/%post_id% 鏈接形式:https://www.zmki.cn/archi…
正文開始:
配置騰訊云CDN
注冊騰訊云賬號開通CDN這個不多說。騰訊云CDN
開通之后開通域名,新用戶還送流量包,可以根據自己的需求選擇套餐
回源配置:
由于我使用的是騰訊云的服務器,好像支持什么Range回源配置,源站類型我選擇自主回源,源站地址就填寫服務器ip。
緩存配置
主要是緩存靜態內容,緩存時間我設置的7天。
不緩存
后臺/wp-admin
登錄頁面/wp-login.php
靜態文件.php;.jsp;.asp;.aspx
其他的都設置緩存
發布/更新文章、提交/審核評論自動清理騰訊云CDN緩存
把下邊的代碼放到當前主題functions.php中(替換代碼里的SecretId 及?$secretKey)
/* 需要填寫你的密鑰,訪問 https://console.qcloud.com/capi 獲取 SecretId 及 $secretKey */$secretKey='你的secretKey ';$secretId='你的SecretId ';//更新或發布文章清理本文和首頁CDN緩存add_action('publish_post','Clean_By_Publish',0);//提交評論更新本文CDN緩存add_action('comment_post','Clean_By_Comments',0);//評論被審核更新本文CDN緩存add_action('comment_unapproved_to_approved','Clean_By_Approved',0);//發布文章更新CDN緩存函數functionClean_By_Publish($post_ID){global$secretKey,$secretId;$url=get_permalink($post_ID);$action='RefreshCdnUrl';/*要清理的頁面,默認包含首頁和文章頁面,需要清理其他頁面請自行發揮*/$PRIVATE_PARAMS=array('urls.0'=>'https://www.zmki.cn/',/*提交首頁刷新,修改成自己的網站首頁*/'urls.1'=>$url,);$HttpUrl="cdn.api.qcloud.com";/*除非有特殊說明,如MultipartUploadVodFile,其它接口都支持GET及POST*/$HttpMethod="POST";/*是否https協議,大部分接口都必須為https,只有少部分接口除外(如MultipartUploadVodFile)*/$isHttps=true;/*下面這五個參數為所有接口的 公共參數;對于某些接口沒有地域概念,則不用傳遞Region(如DescribeDeals)*/$COMMON_PARAMS=array('Nonce'=>rand(),'Timestamp'=>time(NULL),'Action'=>$action,'SecretId'=>$secretId,);/***********************************************************************************/CreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey,$PRIVATE_PARAMS,$isHttps);}//提交評論清理文章CDN函數functionClean_By_Comments($comment_id){global$secretKey,$secretId;$comment=get_comment($comment_id);$url=get_permalink($comment->comment_post_ID);$action='RefreshCdnUrl';/*參數*/$PRIVATE_PARAMS=array('urls.0'=>$url,);$HttpUrl="cdn.api.qcloud.com";/*除非有特殊說明,如MultipartUploadVodFile,其它接口都支持GET及POST*/$HttpMethod="POST";/*是否https協議,大部分接口都必須為https,只有少部分接口除外(如MultipartUploadVodFile)*/$isHttps=true;/*下面這五個參數為所有接口的 公共參數;對于某些接口沒有地域概念,則不用傳遞Region(如DescribeDeals)*/$COMMON_PARAMS=array('Nonce'=>rand(),'Timestamp'=>time(NULL),'Action'=>$action,'SecretId'=>$secretId,);/***********************************************************************************/CreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey,$PRIVATE_PARAMS,$isHttps);}//評論被審核清理CDN緩存函數functionClean_By_Approved($comment){global$secretKey,$secretId;$url=get_permalink($comment->comment_post_ID);$action='RefreshCdnUrl';/*參數*/$PRIVATE_PARAMS=array('urls.0'=>$url,);$HttpUrl="cdn.api.qcloud.com";/*除非有特殊說明,如MultipartUploadVodFile,其它接口都支持GET及POST*/$HttpMethod="POST";/*是否https協議,大部分接口都必須為https,只有少部分接口除外(如MultipartUploadVodFile)*/$isHttps=true;/*下面這五個參數為所有接口的 公共參數;對于某些接口沒有地域概念,則不用傳遞Region(如DescribeDeals)*/$COMMON_PARAMS=array('Nonce'=>rand(),'Timestamp'=>time(NULL),'Action'=>$action,'SecretId'=>$secretId,);/***********************************************************************************/CreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey,$PRIVATE_PARAMS,$isHttps);}//請求主函數,無需改動functionCreateRequest($HttpUrl,$HttpMethod,$COMMON_PARAMS,$secretKey,$PRIVATE_PARAMS,$isHttps){$FullHttpUrl=$HttpUrl."/v2/index.php";/***************對請求參數 按參數名 做字典序升序排列,注意此排序區分大小寫*************/$ReqParaArray=array_merge($COMMON_PARAMS,$PRIVATE_PARAMS);ksort($ReqParaArray);/**********************************生成簽名原文**********************************
? ? ? ? * 將 請求方法, URI地址,及排序好的請求參數? 按照下面格式? 拼接在一起, 生成簽名原文,此請求中的原文為
? ? ? ? * GETcvm.api.qcloud.com/v2/index.php?Action=DescribeInstances&Nonce=345122&Region=gz
? ? ? ? * &SecretId=AKIDz8krbsJ5yKBZQ? ? ·1pn74WFkmLPx3gnPhESA&Timestamp=1408704141
? ? ? ? * &instanceIds.0=qcvm12345&instanceIds.1=qcvm56789
? ? ? ? * ****************************************************************************/$SigTxt=$HttpMethod.$FullHttpUrl."?";$isFirst=true;foreach($ReqParaArrayas$key=>$value){if(!$isFirst){$SigTxt=$SigTxt."&";}$isFirst=false;/*拼接簽名原文時,如果參數名稱中攜帶_,需要替換成.*/if(strpos($key,'_')){$key=str_replace('_','.',$key);}$SigTxt=$SigTxt.$key."=".$value;}/*********************根據簽名原文字符串 $SigTxt,生成簽名 Signature******************/$Signature=base64_encode(hash_hmac('sha1',$SigTxt,$secretKey,true));/***************拼接請求串,對于請求參數及簽名,需要進行urlencode編碼********************/$Req="Signature=".urlencode($Signature);foreach($ReqParaArrayas$key=>$value){$Req=$Req."&".$key."=".urlencode($value);}/*********************************發送請求********************************/if($HttpMethod==='GET'){if($isHttps===true){$Req="https://".$FullHttpUrl."?".$Req;}else{$Req="https://".$FullHttpUrl."?".$Req;}$Rsp=file_get_contents($Req);}else{if($isHttps===true){$Rsp=SendPost("https://".$FullHttpUrl,$Req,$isHttps);}else{$Rsp=SendPost("https://".$FullHttpUrl,$Req,$isHttps);}}//var_export(json_decode($Rsp,true));returnjson_decode($Rsp,true);}functionSendPost($FullHttpUrl,$Req,$isHttps){$ch=curl_init();curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$Req);curl_setopt($ch,CURLOPT_URL,$FullHttpUrl);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_TIMEOUT,1);if($isHttps===true){curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);}$result=curl_exec($ch);return$result;}//騰訊云cdn緩存刷新配置結束
API密匙獲取:https://console.qcloud.com/capi
在CDN控制臺能查到緩存刷新記錄這說明配置成功
ps.經博主測試,PHP7.3不能提交, PHP7.2及以下的版本可以使用。如果不能提交請切換PHP版本
代碼源自張戈博客,鉆芒修改(原代碼報錯)
原創文章,如若轉載,請注明出處:《WordPress配置騰訊云CDN并實現發布/更新文章、提交/審核評論自動清理騰訊云CDN緩存》https://www.zmki.cn/3506.html
文章源自?鉆芒博客? ??https://www.zmki.cn/3506.html