老項目如何優雅的切換HTTPS?
01-01
在老項目中可能遇到各種情形,怎樣可以【優雅】(即切換過程中不能影響線上業務的運行,資料庫也應正常過渡)的切換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 協議,有哪些值得推薦的書籍?