2020-08-21 | UNLOCK

解決 GitHub Pages 套 Cloudflare 後網站打不開的問題

本來給我的博客套 Cloudflare 是想改善 GitHub Pages (github.io) 在國內直連的情況,結果發現套了問題更多。以下是我為 Github.io + Cloudflare 排錯的心得。

1. 打開 Enforce HTTPS 後,TLS 證書無法簽發,顯示 Certificate Request Error: Certificate provisioning will retry automatically in a short period, please be patient.

因為 GitHub 要求 Enforce HTTPS 必須將你的域名直接 CNAME 到 yourid.github.io,添加 A 紀錄到 Github 的服務器、開啟 Cloudflare 的 Proxy 或是 CNAME 接入 Cloudflare Partner 都會導致證書簽發 / 續簽出錯。還有一個坑是,自定義 Domain 為子域名的時候,根域名要沒有紀錄或是同樣 CNAME 到 yourid.github.io,否則也會失敗。

2. 避開 Github.io TLS 證書限制
但是完全照 GitHub 的要求把域名 CNAME 到 github.io 的話,我們還套個毛 CDN?所以,建議開啟 HTTPS 的方式如下:

  1. 取消 Github.io 的 Enforce HTTPS,此時你的站點會暫時是 HTTP 裸奔的狀態
  2. 將 Cloudflare 的 SSL 等級調整為 Flexible,在靈活模式下,Cloudflare 會使用 HTTP 訪問你的源站
  3. 開啟 Cloudflare 的 Force HTTPS
  4. 開啟 CDN

之後 Cloudflare 就會將你的站點應用上他們的 TLS 證書,訪客可以繼續用加密方式訪問你的網站。效果如下

Client —HTTPS— Cloudflare —HTTP— Github.io

3. 調整 Cloudflare 防火牆等級,允許來自特定地區的連線
解決 HTTPS 問題後,你可能會發現使用某些梯子還是上不了你的網站。這可能是 Cloudflare 的防火牆將其視為可疑連接而阻檔了,所以可能會發生掛代理打不開,直連卻能連上的奇特現象。可以調整 Cloudflare 防火牆等級讓它不要那麼敏感。步驟:

  1. Firewall → Settings → Security Level: Essentially Off
  2. Firewall → Tools → IP Access Rules: 允許來自 CN, HK, MO, TW, SG, JP, KR, US, DE 的連接 ( 可視情況增加 )

Refernces

評論加載中