2018年1月28日 星期日

wordpress 網站放到 aws 上 , 若採用 aws load balance 及 http ssl 授權金鑰所產生的問題

這應該算是有點 tricky 的問題?

這次把公司網站放到 aws 上之後, 在設定 load balance 時發現 aws 可以直接設定 https ssl 所授權的網域, 這樣就不需要維護每三個月更新一次的 letsencrypt . 於是很愉快的使用下去了.

在設定時, 有注意到這種方式完全不用修改 apache 設定就可以直接 work , 但沒深究其原因.
直到發現公司官網在以 https 瀏覽時, 會因為出現有混合 http/https 資料而產生 ssl not secure 的情況, 造成網頁顯示問題時, 開始追究原因後才發現和這個有關.

比較簡單的說法是, aws load balance 的做法像是加一層 revserse proxy 擋在 web 前面, 所以對 web server 來說其實都是 http request , 而不是 https request, 所以 apache 不需要任何 ssl 相關的設定.

但 wordpress 會根據 request 來決定網頁內連結裡應該是 http or https , 所以丟出的連結都是 http 而造成了 http/https mixed content 的情況.
以上解讀若有錯誤請指正 QQ

解決方案 就如同這個網頁提供的, 因為 aws load balance 轉發 request 時會加入一個 header "X-Forwareded-Proto", 可以在 apache 裡設定當這個 header 存在時, 加入一個環境變數, 而 wordpress 會參考到這個環境變數而認為這是一個 https 的 request 產生 https 的連結.

對我來說這問題實在奇妙但真實, 再次驗證在設定系統時不能疏忽或小看任何變動的地方, 否則就是會踩坑給你看.