網(wǎng)站從http轉(zhuǎn)為https折騰記錄
編輯:狂族晨曦 來源:WordPress技巧 日期:2020-11-15 閱讀: 2,658 次 2 條評論 » 百度已收錄
先森之前先發(fā)了一篇博文,講述了一些想從http轉(zhuǎn)為https做的一些準備:網(wǎng)站http轉(zhuǎn)為https之始,從七牛到騰訊云
前進的道路從來都不是一帆風順的,先森在切換的過程中也是遇到了一些問題,這里簡單的記錄一下歷程。
七牛轉(zhuǎn)騰訊云
七牛令先森最喜愛的功能就是圖片的處理功能了,現(xiàn)在是騰訊云的對象存儲COS也支持直接圖片處理,所以先森才開始打算從http轉(zhuǎn)為https。
針對七牛的圖片處理,先森以前還是寫過幾篇博文的:
WordPress百度UEditor編輯器自動添加七牛云儲存裁剪代碼
當然,當時的用法比較簡單粗暴,直接用了一大段的圖片處理參數(shù),而正確的方法應該是將固定的處理方法保存為處理樣式,直接在圖片后面調(diào)用圖片處理樣式,這個先森也在上面的最后一篇博客中寫到了。
先森使用圖片處理,最主要的用途還是加速網(wǎng)站打開速度。將不同位置的圖片縮小至合適的大小,讓圖片的體積盡可能的減小,以實現(xiàn)加快網(wǎng)站訪問速度。先森最喜歡的一點,還是文章中的圖片,結(jié)合燈箱插件,讓圖片在未點擊時呈現(xiàn)縮放并降低圖片質(zhì)量的狀態(tài),點擊后顯示原始大小及質(zhì)量。
這么好的功能先森當然不想放棄,先森網(wǎng)站的各種縮略圖都是不同的大小,所以有不同的樣式。本以為從七牛的圖片處理換到騰訊云的圖片處理,相關(guān)規(guī)則還得自己研究半天才能實現(xiàn)同樣的效果,結(jié)果圖片處理的規(guī)則竟然非常兼容。

COS圖片處理規(guī)則
除了需要添加水印的規(guī)則,其他的規(guī)則直接將七牛的復制過來就可以直接用了,簡直方便的一批。
COS新增樣式時,添加水印圖片竟然只能上傳圖片,而不能從存儲桶里直接選擇,這一點有些體驗不佳。而自己通過自定義規(guī)則去添加水印圖片的話,又會比較麻煩:

使用自定義參數(shù)添加水印圖片需要滿足3個條件
不過研究一下還是可以完成操作,總的來說,這個切換過程還是非常滿意的。
自適應http和https
先森前面的文章也寫到過,為了避免切換到https有問題,先森切換的時候是沒有開啟強制跳轉(zhuǎn)到https的,所以這里就需要做到http和https的兼容。
先森想到的兼容方式就是將網(wǎng)頁中的‘http://’換成‘//’,這樣就會根據(jù)訪問的協(xié)議自動顯示相應的協(xié)議。
要實現(xiàn)也很簡單,先森下面這篇博客中講到了“WordPress七牛CDN代碼版”:
七牛圖片處理樣式的正確使用方式
先森這里把這個代碼改吧改吧就能實現(xiàn)https的兼容了。
//WordPress七牛CDN代碼版
function QiNiuCDN(){
function Rewrite_URI($html){
/* 前面是需要用到七牛的域名,后面是需要加速的靜態(tài)文件類型,使用分隔符 | 隔開即可 */
/* 這里先森小改了一下,兼容https */
$pattern ='/http[s]{0,1}:\/\/(www\.|)capjsj\.cn\/(wp-|ueditor|avatar)([^"\']*?)\.(jpg|js|css|gif|png|jpeg|ico|cur)/i';
/* 七牛CDN空間地址,請自行替換成實際空間地址*/
/* 先森這里又換成騰訊云COS的地址了 */
$replacement = '//cos.capjsj.cn/$2$3.$4';
$html = preg_replace($pattern, $replacement,$html);
/* 增加了一次替換,把http://替換為// */
$html = preg_replace('/http:\/\/www.cnidcc.cn/i', '//www.cnidcc.cn',$html);
return $html;
}
if(!is_admin()){
ob_start("Rewrite_URI");
}
}
add_action('init', 'QiNiuCDN');
這個時候需要注意,WordPress后臺登錄的時候,需要使用http,因為在設(shè)置-常規(guī)處的WordPress地址與站點地址還未修改,為了http與https的兼容,所以當時也并未修改。但若要修改,這里還有個坑。
全站HTTPS
先森經(jīng)過一段時間的測試,發(fā)現(xiàn)https沒有什么問題,所以就打算將網(wǎng)站開啟HTTP到HTTPS的強制跳轉(zhuǎn),并且把后臺配置中的站點地址也改成HTTPS,但是先森修改后,竟然遇到了后臺地址無限跳轉(zhuǎn)。

HTTPS無限302跳轉(zhuǎn)
經(jīng)過一番搜索,發(fā)現(xiàn)是需要在WordPress網(wǎng)站根目錄中的wp-config.php中添加配置進行解決:
/* 解決https無限跳轉(zhuǎn)*/
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
添加在文件開頭處即可,藥到病除。
CDN緩存命中率低
先森閑來無事,跑去17ce測試了一下網(wǎng)站的GET速度,結(jié)果大出先森預料,竟然全國通紅(忘了截圖)。
先森覺得很奇怪,先森這網(wǎng)站這么久了沒更新了,按理說應該訪問到的都是緩存才對啊,然后先森進行了排查。
先森就從首頁排查起,先森在非放置本站的服務(wù)器上curl首頁,結(jié)果發(fā)現(xiàn)經(jīng)常是 X-Cache-Lookup: Cache Miss,但是連著刷兩次就會變成Cache Hit,但是再過幾秒curl又變成Cache Miss了,這就有點奇怪了。仔細看了一下響應頭,結(jié)果先森發(fā)現(xiàn) Cache-Control: must-revalidate, max-age=3,這就表示緩存3秒啊,怪不得連著刷能命中緩存,接下來就要看這個響應頭是怎么配置的了。
不過講道理,騰訊云的CDN判定是否命中緩存的規(guī)則是看X-Cache-Lookup是否為Hit From MemCache或Hit From Disktank,直接顯示Cache Hit和Cache Miss是很奇怪的。
X-Cache-Lookup:Hit From MemCache 表示命中 CDN 節(jié)點的內(nèi)存。
X-Cache-Lookup:Hit From Disktank 表示命中 CDN 節(jié)點的磁盤。
不過先森也去查了一下,Cache Hit也是正常命中緩存了,也不需要過多的去糾結(jié)。
這個僅緩存3秒的響應頭,先森自己記得是沒有配置的,可能比較容易出問題的可能是WordPress中使用的緩存插件。先森使用的緩存插件是WP Super Cache,所以首先就是懷疑這貨。
百度大法好,果然是這貨影響的。默認情況下,WP Super Cache 返回的 Cache Control Header 固定為: cache-control: max-age=3, must-revalidate ,不管你在插件設(shè)置中設(shè)置的緩存超時時間是多久。
修改起來也簡單,只要在WordPress根目錄的wp-config.php增加配置即可:
define('WPSC_CACHE_CONTROL_HEADER','max-age=3600, must-revalidate');
但是,如果CDN的緩存也是繼承源站的響應頭,那先森在騰訊云CDN的緩存配置豈不是沒有用了?
所以還是得研究一下什么情況下,CDN會繼承源站的配置。

經(jīng)過一番查閱騰訊云官方文檔,發(fā)現(xiàn)是開啟高級緩存配置時,CDN會對比源站響應頭中的max-age值。先森看了一下自己CDN的配置,果然是開啟了高級緩存配置的,趕緊關(guān)閉:

關(guān)閉高級緩存配置
這個配置估計是為了迎合一些對自定義配置要求較高的用戶,先森這種小站就沒必要開啟了。

CDN對no-cache或者no-store不緩存
需要注意的一點是,默認情況下,CDN也不會對no-cache或者no-store的資源進行緩存,所以如果有遇到始終無法緩存的情況,可以檢查一下cache-control是否配置了禁止緩存。
先森最終是即修改了WP Super Cache的配置,將max-age改為了3600,即1個小時;CDN側(cè)是關(guān)閉了高級緩存配置。至于為什么關(guān)閉了高級緩存配置的情況下,還要修改插件的緩存配置,那是因為max-age還會影響到客戶端瀏覽器的緩存配置,3秒太短了,所以還是修改一下比較好。
修改之后,過了一段時間,先森再進入17ce進行GET測試,測試的結(jié)果就能讓先森接受了:

17ce測速
總結(jié)
先森在網(wǎng)站開啟HTTPS中,可能還有一些比較小的坑,先森隨手就解決了,這里就沒有記錄了。網(wǎng)站加了CDN后,訪客具體的訪問速度先森實際上也不得而知,因為先森自己打開網(wǎng)站覺得還是很快的,結(jié)果用17ce一測,全紅,這個17ce的數(shù)據(jù)也不知道與實際情況是否匹配。如果有訪問比較慢的,還希望能夠留言告訴先森,您的地域與具體訪問的URL。
歷史上的今天:
轉(zhuǎn)載請注明出處來自http://www.cnidcc.cn/http_to_https.html

川公網(wǎng)安備 51011202000104號
我之前也折騰了很久,后來在寶塔里搞定了
用了CDN就沒必要用靜態(tài)緩存插件,CDN的緩存規(guī)則中無需添加不緩存php文件類型,只添加要緩存的文件類型即可,比如圖片文件格式和js、css、woff等等。