標籤:

老項目如何優雅的切換HTTPS?

在老項目中可能遇到各種情形,怎樣可以【優雅】(即切換過程中不能影響線上業務的運行,資料庫也應正常過渡)的切換https呢?比如以下場景(但不僅限以下幾種):

1. 項目中代碼層面存在http鏈接,並且有些外鏈不支持https;

2.頁面的部分鏈接(不支持https)是從資料庫中讀取,可能是數據的一部分;

3.頁面中包含包含第三方插件(比如微博插件),第三方插件不支持https;


1. 收集所有http業務的域名

2. 收集承載這些域名的所有伺服器和設備。設備包括負載均衡器,WAF等所有和80埠相關的。

3. 找出所有引用的外部資源。

4. 看這些外部資源是否支持https或者有替代方案。

5. 改代碼,測試。

6. 升級所有相關的伺服器,設備以支持https。

7. 改資料庫,上線。


不是用nginx支持嗎。

http和https都支持,然後來回映射。


不支持https的加一層反代


https會攔截http請求,http不會攔截https請求,注意是請求,圖片和鏈接的跳轉之類的是不會攔截的

資料庫層面的數據和介面等可以先升級為https,這樣不影響現網

頁面中靜態資源也可以升級為https

第三方的如果是在介面層面的,自己套一層代理轉發

最後頁面升級


開反向代理,同時支持http和https,按照協議區分各自記錄access log,一段時間後如果http請求再無日誌記錄,可以從配置中刪除。

PS: 請求量巨大的話慎開access log。


Caddy 你值得擁有


遇事不決加一層


你在 Server 端的 「前端」 連接入口啟用 HTTPS,例如 nginx 。

nginx 和應用之間仍然是 HTTP。

nginx 同開 80 和 443 埠(也就是同時支持 HTTP 和 HTTPS)

然後在日後的維護中新內容全部用 HTTPS,逐步將硬編碼的 HTTP 換成統一的配置管理。

直到代碼全局用一處 HTTPS 配置,然後就可以關掉 HTTP 了。


先升級登陸頁和靜態資源


推薦閱讀:

怎麼能看出一個網站用什麼後台語言開發的
如何理解Web應用程序的MVC模型?
Nodejs中,我將資料庫連接後的實例對象放在global全局對象中,這樣合理嗎?
Web 前端和後端工程師的具體職責分別是怎樣的?
想深入了解 HTTP 協議,有哪些值得推薦的書籍?

TAG:Web開發 | HTTPS |