网站升级到新服务器,第一次折腾站点升级HTTPS 虽胜尤败
最近很多站點都開始升級到 HTTPS,鑒于又拍云有免費的 HTTPS 流量和提供自動續簽的 Let's Encrypt 證書,所以昨晚終于忍不住就出手折騰一番,雖然歷盡千辛萬苦,但是最終把站點所有頁面都折騰出小綠鎖還是蠻有成就感的。可惜今天中午又把站點折騰回 HTTP 了,雖然只是經歷過短暫的一夜,但是也是只記得銘記的,所以就把大概折騰的過程記錄下來,以便下次再次折騰時以作參考。
注冊又拍云獲取 HTTPS 流量和證書
這里就不展開說,就大概說一下吧。到又拍云官網注冊之后,就可以使用 CDN 服務,通過 CNAME 方式讓 CDN 正常使用后,就可以配置相應的緩存規則和其他設置,其中 HTTPS 需要使用到證書,想偷懶的可以直接使用又拍云的提供免費而且會自動續簽的 Let's Encrypt 證書。只要你的 CDN 服務的 CNAME 配置好之后,而且域名是已經備案的,獲取這個 Let's Encrypt 證書很容易,幾乎可以說是秒獲得。
獲得這個證書之后,只需要在又拍云的 CDN 中設置是否強制跳轉 HTTPS 即可。唯一的缺點就是無法下載這個 Let's Encrypt 證書,這也導致我們無法在服務器中部署源站 SSL,很有可能就會導致百度 HTTPS 認證失敗。PS:也有博主反饋說可以通過認證,我就是無法通過認證才回退到 HTTP 的。
在又拍云中開啟了 CDN 和 HTTPS 之后遇到的錯誤大概有:
1、站點無法打開。這個問題是以為我在 CDN 中設置了 HTTPS 協議回源,但是由于證書是在又拍云的,所以無法設置源站的 SSL,所以只能更改回源方式為 HTTP 協議回源,改回來之后就可以正常訪問了。
2、前后臺樣式錯位。這個問題是因為我關閉了又拍云 CDN 的參數跟隨,應該保持默認全程跟隨即可。
3、整站刷新過多無法訪問。又拍云 CDN 整站刷新一天只能用 5 次,而且刷新過多會導致站點無法訪問,需要過一段時間后才能正常訪問。
人工替換數據庫和主題文件中的 HTTP 變成 HTTPS
1、站點文件。標準的主題文件一般都不用怎么折騰,一般就是登錄 WordPress 后臺在設置 >> 常規中把“WordPress 地址(URL)”和“站點地址(URL)”改為 HTTPS 即可。甚至可以在登錄狀態下手動更改地址欄為 https://youdomain.com/wp-admin/options.php,找到所有值為 http://youdomain.com 的,都改為 https://youdomain.com。
2、數據庫文件。這個一般推薦直接在數據庫上通過 SQL 直接替換,比如:
UPDATE?wp_posts?SET?guid?=?REPLACE(guid,?'http://youdomain.com','https://youdomain.com')
UPDATE?wp_posts?SET?post_content?=?REPLACE(post_content,?'http://youdomain.com','https://youdomain.com')
當然,不想使用 SQL 操作數據庫也可以通過 PHP 代碼自動替換,具體可參考《WordPress 開啟 HTTPS 后正文圖片改為 HTTPS 兩種方法》。
人工替換七牛云圖片為 HTTPS
由于以前埋下的坑,我的圖片都是人工上傳到七牛云,而不是通過后臺上傳圖片然后鏡像到七牛,所以在不想付費使用七牛云 HTTPS 的圖片的話,唯一辦法就是把圖片本地化然后替換數據庫中圖片的地址。這個也很簡單的,直接圖片本地化就行,具體方法請參考《如何將存儲在七牛云中的圖片批量下載到本地?》,我下完整個站點的圖片也就是分把鐘的事情,挺快的。替換數據庫圖片地址就不說了,參考上面第二點吧。
逐項排查頁面是否都有小綠鎖
其實一個站點無法就是幾個頁面,分別是首頁、列表頁、文章頁、頁面,其他都差不多,所以只需要看看這幾個頁面是否正常就行,不正常的話,就通過瀏覽器的“查看元素”功能來看那些加載的資源(比如圖片或 JS 文件等)沒有替換為 HTTPS,然后看看路徑在哪里,逐一排查,逐一修改即可。
申請百度站長平臺的 HTTPS 認證
到了這一步,我的整個站點所有頁面都已經有小綠鎖了,而且訪問的 HTTP 網址都跳轉到 HTTPS(又拍云的強制跳轉 HTTPS 功能),這次升級 HTTPS 可以說堪稱完美。
沒想到在百度站長平臺申請 HTTPS 認證的時候死活不通過,添加的 HTTPS 地圖地址也抓取失敗,據說 HTTPS 認證需要在源站部署 SSL,并添加 301 跳轉,但是我的證書是在又拍云的 CDN 上,而且證書無法下載,所以無法部署在服務器上,連訪問 HTTP 地址的狀態碼也是 200 的,又拍云工作人員說強制 HTTPS 跳轉后先是 301 狀態碼然后變成 200 狀態碼,但是我折騰了半天還是無法再百度站長平臺進行 HTTPS 認證。
服務器上申請 Let's Encrypt 證書
既然百度要求我們在源站上部署 SSL,所以就打算在服務器上申請 Let's Encrypt 證書重新部署,是通過 acme.sh 方式獲取證書,可惜每次都在關鍵一步失敗,錯誤的提示大概就是說我的這個域名已經有了一張 Let's Encrypt 證書,所以無法申請第二張 Let's Encrypt 證書。看來只能放棄使用又拍云,等 3 個月后又拍云給的那張 Let's Encrypt 證書過期,然后重新在服務器上申請證書并升級 HTTPS 了。PS:這次升級 HTTPS 雖然是成功了,但是無法通過百度站長平臺的 HTTPS 認證的話,就是失敗,所以只能選擇回退到 HTTP。
回退 HTTP 操作
這個就相當于升級 HTTPS 的翻版,把升級 HTTPS 的工作重新做一遍,只不過是把 HTTPS 變成 HTTP 而已。不過操作流程熟悉之后,折騰起來也是很容易的。
總結
雖然這次升級到 HTTPS 最終還是回到起點,但是經過這次折騰也學習到不少東西,當然也吸取了不少教訓。比如不能貪圖方便使用第三方的證書,而應該是在服務器上直接申請證書,方便下載和使用。雖然浪費了一個晚上和一個上午的時間,但是也摸清了很多東西,等到下一次折騰 HTTPS 的時候,一定會事半功倍的。
你可能感興趣的文章
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的网站升级到新服务器,第一次折腾站点升级HTTPS 虽胜尤败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCF 201312-4 有趣的数
- 下一篇: 服务器端接华为sdk无响应,sdk未响应