處理WordPress經過Cloudflare的https對應
這應該是倒數第二篇了吧,想不到為了裝靜態化要用的Plugin,結果被逼要先升級系統,然後在升級系統的過程中又遇到對外線路有問題,在處理的時候就乾脆來寫經驗心得文做個紀錄。
我這邊的主機線路是:
對外網 — Cloudflare — Reverse Proxy — WordPress
Cloudflare設定的地方在
Dashboard→「SSL/TLS」→「概觀」→「自訂SSL/TLS」那邊

一個解法:Cloudflare走flexable模式
好處:簡單方便 缺點:是強制主機送https超連結,主機自身自己不知道有https,容易造成線路混亂。
我的網路線路就是:
對外網 | Cloudflare | Reverse Proxy | WordPress | ||||
https 443 | http 80 |
WordPress主機視角: 全程都是http,不知道自己是https
從Cloudflare到Worepress這段走80純http,但是對外到Cloudflare這邊走https。
因為Wordpress自己不知道是走https,所以由Wordpress輸出的所有連結都會是http,必須手動改設定強制都送https超連結。
改wp-config.php 強制開 HTTPS:
$_SERVER['HTTPS'] = 'on';
另一個解法:Cloudflare走full模式(我最後採用的方案 )
缺點:設定麻煩一些 好處:可以讓目標主機知道
我的網路線路就是:
對外網 | Cloudflare | Reverse Proxy | WordPress | ||||
https 443 | http 80 |
WordPress主機視角: 雖然傳輸是http,但可以從封包header知道現在是https
然後Reverse Proxy這層要加入以下內容,讓可以識別是不是https的header能正確傳給Wordpress那邊:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
wp-config.php
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
本來想說這篇寫在新站,不過想想是和Wordpress有關,所以還是先當作這裡Wordpress舊站的倒數兩篇吧~