有了可以在兩台代理節點之間移動的 Web VIP,內部用戶端可以透過固定名稱連到 Nginx。今天要把這個入口發布到網際網路:正式網域交由 Cloudflare 回答公開 DNS,訪客先連到 Cloudflare Edge,再由 Cloudflare 經過 OPNsense、Web VIP 與 Nginx 抵達 Web 後端。
公開網站需要同時處理名稱委派、代理狀態、兩段 TLS、網站應用程式防火牆(Web Application Firewall,WAF)、Origin 入口限制與真實來源位址,才能建立可驗證且可持續服務的 HTTPS 入口。
本文閱讀方式
- 完整理解公開入口:依序閱讀 DNS、TLS、WAF、Origin 保護與用戶端 IP,最後再看 Lab 的驗證結果。
- 掌握完成 Lab 的最低限度知識:閱讀標有 ⭐ 的段落。
- 快速了解當天的部署內容:閱讀文末的 Lab/實作章節。
- 跟著系列建立完整系統:依照 GitHub 詳細部署文件 的天數順序操作。
各位還記得 2024 年的喜傑獅「一讚折一元」事件嗎?業者解除公開 DNS 與網站 IP 的對應後,部分使用者在自己電腦的 hosts 寫入網站名稱與 Origin IP,讓瀏覽器直接連到持續運作的 Origin,並完成下單。
hosts 可以直接替這台電腦指定網站名稱對應的 IP,瀏覽器連線時會照常把原本的網站名稱放進 TLS SNI 與 HTTP Host。只要 Origin 接受網際網路連線並繼續提供訂單功能,請求便能抵達正確網站。那麼,使用 Cloudflare 發布網站時,要如何避免外部使用者知道 Origin IP 後直接繞過 Edge、WAF 與入口政策?後面的 DNS、代理路徑與 Origin 保護會逐步回答這個問題。
瀏覽器輸入網址後,會先透過 DNS 找到連線目的地,再建立 TCP 與 TLS 連線,最後才傳送 HTTP 請求。橘雲啟用後,公開 DNS 回覆的是 Cloudflare Anycast IP。Origin 公網 IPv4 只供 Cloudflare 建立第二段連線。Cloudflare Edge 在第一段 TLS 解密 HTTP 請求,完成安全規則與代理處理後,再使用第二段 TLS 傳給 Origin。
這條路徑需要一個可由網際網路連入的公網 IPv4。若 WAN 位於上游 NAT 後方,還要由實際持有公網 IPv4 的上游設備轉送 TCP 443。公網位址、雙重 NAT 與 WAN 路徑可回到 Day 12 複習。
網域名稱同時涉及註冊、委派與記錄管理。網域註冊商(Domain Registrar)管理持有人資料、續約、轉移鎖與 Auth/EPP Code。頂級網域註冊管理機構(Registry)維護 .com 等頂級網域資料,並將網域的名稱伺服器公布在父 DNS 區域。權威 DNS(Authoritative DNS)才保存 A、AAAA、CNAME、MX、TXT 等實際記錄。
| 操作 | 改變的內容 | 帳務與續約 |
|---|---|---|
| 連接網域/變更名稱伺服器 | 父 DNS 區域改為委派至 Cloudflare,Cloudflare 成為權威 DNS | 原註冊商繼續管理 |
| 網域註冊移轉(Registrar Transfer) | 網域的管理註冊商改變,通常需要解除 Transfer Lock 與 Auth/EPP Code | 改由新註冊商管理 |
| 修改 DNS Record | 變更主機名稱對應的 A、AAAA、CNAME、MX 或 TXT | 不變 |
本次採用的方式
本次使用 Cloudflare 的 Connect a domain 建立 DNS 區域(Zone),再到 GoDaddy 將名稱伺服器改成 Cloudflare 指派的兩個值。網域由 GoDaddy 註冊與續約,Cloudflare 負責權威 DNS、橘雲代理與後續安全功能。本次沒有執行 Registrar Transfer。

圖(一)網域持有人在 GoDaddy 指定名稱伺服器。GoDaddy 將委派資料提交給 .com Registry,父 DNS 區域據此公布 Cloudflare 名稱伺服器
Cloudflare 的 Primary DNS Full Setup 會為該 DNS 區域指派兩台權威名稱伺服器。變更前先核對自動匯入的記錄。原網域若已啟用 DNSSEC,先移除註冊層的舊 DS 記錄,等待原 DS TTL 到期,並確認公開查詢已無舊 DS,再更換名稱伺服器。Cloudflare 顯示 Zone Status: Active 後,才啟用 Cloudflare DNSSEC 並加入新的 DS 記錄,避免父 DNS 區域保留舊金鑰資料而造成驗證失敗。
瀏覽器會把查詢交給作業系統的用戶端解析器(Stub Resolver),再由 ISP、企業網路或 1.1.1.1 等遞迴解析器(Recursive Resolver)完成查詢。沒有快取時,遞迴解析器依序從根名稱伺服器取得 .com 頂級網域(Top-Level Domain,TLD)名稱伺服器、從 .com TLD 取得 Cloudflare 名稱伺服器,最後向 Cloudflare 權威 DNS 取得 A Record,再依 TTL 暫存並回覆用戶端。

圖(二)沒有快取時,公共遞迴解析器依委派逐層找到 Cloudflare 權威 DNS,再取得 app.example.com 的 Cloudflare Anycast IP
根名稱伺服器與 TLD 提供下一站的委派資訊,權威 DNS 才提供 DNS 區域內的最終記錄。DNS 傳播主要來自父 DNS 區域的委派更新與各層快取依 TTL 到期後重新查詢。dig +trace app.example.com 可以觀察完整查詢鏈,dig A app.example.com 則檢查用戶端實際取得的位址。取得 IP 後,瀏覽器才另外建立 TCP、TLS 與 HTTP 連線。
內部名稱與公開名稱服務不同的使用範圍,可以同時存在:
| 名稱 | 回答位置 | 記錄內容 | 使用範圍 |
|---|---|---|---|
web.lab.home |
內部 DNS | 10.77.20.10 |
內部 Web VIP 與診斷 |
app.example.com |
Cloudflare | Origin 公網 IPv4 | 公開 HTTPS |
內容傳遞網路(Content Delivery Network,CDN)透過分散在不同地區的 Edge 節點接收使用者請求,並以 Anycast 將流量送往合適的 Cloudflare Edge。橘雲同時提供 CDN 與公開反向代理能力,Edge 會依內容與快取政策決定直接回應或連回 Origin。
簡單來說,CDN 就像替網站建立一組分散各地的高速公路交流道:使用者先連到網路路徑較合適的 Edge。Edge 有可用快取時直接回覆,需要最新或動態內容時才向 Origin 取得資料。
快取命中時,Edge 可以直接回傳已保存的內容,縮短傳輸距離並降低 Origin 的頻寬與處理負載。動態內容、快取未命中或設定為略過快取的請求則會回到 Origin。CDN 不會自動快取所有內容,登入、交易與個人化回應需依應用需求設定 Cache Rule 與回應標頭。
A、AAAA 與 CNAME 可以選擇 DNS only 或 Proxied。兩者都由 Cloudflare 回答 DNS,差別在於 HTTP/HTTPS 是否先經過 Cloudflare:
| Proxy Status | DNS 回覆 | HTTP/HTTPS 路徑 |
|---|---|---|
| DNS only(灰雲) | Origin 位址 | 用戶端直接連 Origin |
| Proxied(橘雲) | Cloudflare Anycast IP | 用戶端先連 Cloudflare,再由 Cloudflare 連 Origin |
Cloudflare 在 Edge 終止第一段 TLS,套用快取、安全與代理政策後,再為需要回源的請求建立前往 Origin 的第二段連線。

圖(三)使用者先連到 Cloudflare Edge。需要回源的請求經過安全與代理政策後,再以另一條 HTTPS 連線送往 Origin
Proxied Record 的 TTL 預設為 Auto,目前是 300 秒,由 Cloudflare 控制。這個 TTL 限制遞迴解析器暫存 Cloudflare Anycast IP 的時間。本機、瀏覽器或上游快取可能讓實際觀察時間稍長。DNS 區域內雖然保存 Origin 公網 IPv4,權威 DNS 對橘雲查詢回覆的是 Cloudflare Anycast IP,因此外部 dig 無法直接看見該筆 Origin 位址。
橘雲主要改變公開解析與連線路徑。Origin 公網 IPv4 可能出現在歷史 DNS、郵件記錄或其他服務中,因此入口安全性還需要 OPNsense 的來源限制共同完成。
Cloudflare 位於 HTTPS 路徑中間,使用者與 Origin 會分別建立一條 TLS 連線:

圖(四)瀏覽器驗證 Cloudflare Edge Certificate,Cloudflare 再以另一條 TLS 連線驗證 Nginx Origin Certificate
Edge Certificate 供瀏覽器驗證。Origin Certificate 可由公開 CA 或 Cloudflare Origin CA 簽發,交由 Cloudflare 驗證。
前面介紹過 OPNsense 的 IDS/IPS 功能,但 WAF 必須先取得解密後的 HTTP,才能檢查方法(Method)、主機名稱(Hostname)、URI、標頭(Header)與請求主體(Request Body)。今天的第二段 TLS 只會穿過 OPNsense,直到 proxy01/proxy02 的 Nginx 才終止。因此 OPNsense 上的 Suricata 可以檢查網路流量與可見的 TLS 資訊,直接在目前路徑加入 WAF 則無法取得完整 HTTP。
Cloudflare 也提供 WAF 服務。本次由 Cloudflare Edge 終止使用者建立的第一段 TLS,先對解密後的 HTTP 套用安全規則,再以 Full (strict) 建立第二段 TLS。OPNsense 則繼續負責來源限制、DNAT、連接埠與連線狀態。
WAF 也可以改放在自己的環境。放在 OPNsense 時,要先由 Nginx Reverse Proxy 終止 TLS,再把 HTTP 交給 NAXSI Module。只安裝 Plugin 並維持原本的 DNAT 路徑,NAXSI 不會收到 HTTP。另一種做法是把 WAF 放在 proxy01/proxy02,直接接在既有的 Nginx TLS 終止點後方。
| 方案 | TLS 終止與 HTTP 檢查位置 | 主要取捨 |
|---|---|---|
| 目前:Cloudflare WAF | Cloudflare Edge 終止第一段 TLS,在流量進入 WAN 前檢查 HTTP | 提供 Edge DDoS、CDN 與託管規則。Cloudflare 可以讀取 HTTP,功能與額度受方案限制 |
| 替代方案:OPNsense Nginx/NAXSI | OPNsense 終止第二段 TLS,由 NAXSI 檢查 HTTP,再建立第三段 TLS 送往 Web VIP | 規則留在本地。防火牆同時承擔 TLS、WAF 與網路邊界,也要管理憑證、誤判及單點影響 |
| 替代方案:Proxy VM WAF | proxy01/proxy02 的 Nginx 終止第二段 TLS,並在本機檢查 HTTP | 保留代理節點 HA 與故障隔離。流量抵達 Origin 網路後才檢查,兩台節點要同步規則與例外 |
本系列選擇 Cloudflare WAF,讓 HTTP 威脅先在 Edge 接受檢查,再由 OPNsense 只允許 Cloudflare Source 進入 TCP 443,同時保留 proxy01/proxy02 的入口 HA。需要自行掌握 WAF 規則時,可改放在 Proxy VM。具備雙防火牆、憑證與規則同步能力後,再評估由 OPNsense 終止 TLS。

圖(五)Cloudflare Edge 取得 HTTP 內容後依序執行 DDoS、Custom、Rate Limiting 與 Managed Rules,未被終止的請求才送往 Origin
| 階段 | Cloudflare 提供的功能 | 本次 Free Plan 的界線 |
|---|---|---|
| HTTP DDoS Protection | 自動辨識並緩解大量第七層(Layer 7)攻擊流量 | 自動生效,功能定位和 WAF 規則不同 |
| Custom Rules | 依主機名稱、URI、IP、標頭、國家等條件執行 Block 或 Managed Challenge | Free Plan 可以使用,規則數量與可用條件受方案限制 |
| Rate Limiting Rules | 對登入、API 等路徑限制指定期間內的請求次數 | Free Plan 可以使用,規則數量、計數欄位與時間範圍受方案限制 |
| Free Managed Ruleset | 由 Cloudflare 維護高影響且廣泛遭利用的漏洞規則 | Free Plan 預設部署 |
| Bot Fight Mode | 挑戰符合已知 Bot 特徵的流量 | 與 Ruleset Engine 的上述階段分開,需自行啟用 |
付費方案還能使用範圍更廣的 Cloudflare Managed Ruleset 與 OWASP Core Ruleset。Free Managed Ruleset 只提供其中針對高影響漏洞的子集。實際效果要從 Security Events 核對命中的 Rule、Action 與誤判情況。
Cloudflare 的 Full (strict) 會加密第二段連線,並驗證 Origin Certificate:
| Encryption Mode | 使用者到 Cloudflare | Cloudflare 到 Origin | Origin 憑證驗證 |
|---|---|---|---|
| Flexible | HTTPS | HTTP | 無 |
| Full | HTTPS | HTTPS | 接受未受信任或自簽憑證 |
| Full (strict) | HTTPS | HTTPS | 驗證有效期、簽發者與名稱 |
今天使用 Full (strict)。部署順序是先讓兩台 Nginx 都能用正確憑證提供 TCP 443,再啟用 Full (strict)。Origin 憑證未符合條件時,Cloudflare 會拒絕連線,使用者可能看到 526 錯誤。
Full (strict) 管理 Cloudflare 與 Origin 的加密和驗證,HTTP 轉向 HTTPS 則是另一項入口政策。網站需要統一使用 HTTPS 時,可在 Edge 啟用 Always Use HTTPS 並驗證轉向結果。HTTP Strict Transport Security(HSTS)會被瀏覽器記住,適合等所有公開主機名稱都能穩定提供 HTTPS 後再啟用。
Cloudflare Origin CA 憑證的信任範圍是 Cloudflare 到 Origin。一般瀏覽器直接連 Origin 時通常不信任這張憑證,這正好符合 Origin 只接受 Cloudflare 路徑的設計。兩台 Proxy 必須安裝涵蓋相同主機名稱的憑證與私鑰,私鑰權限僅開放給必要服務。憑證有效期限則納入自行維護的監控與換發流程。
Cloudflare 連向 Origin 時,OPNsense 看到的來源位址是 Cloudflare 公布的 Proxy IP 網段。本次公開入口如下:

圖(六)Cloudflare 來源符合 WAN Rule 後,由 DNAT 轉向 Web VIP。Full (strict) 驗證 Nginx Origin Certificate 後傳送 HTTPS 請求
本次 Origin 回源只使用 IPv4。固定公網 IPv4 可建立 A Record,本次因公網位址由 DDNS 維護,改用橘雲 CNAME 指向 DDNS Hostname。公開 A 查詢會回覆 Cloudflare Anycast IPv4,OPNsense Alias 與 WAN Rule 也以 IPv4 建立。Cloudflare 的 IPv6 Compatibility 預設會讓橘雲主機名稱同時提供 Edge IPv6。用戶端即使透過 IPv6 連到 Cloudflare,第二段連線也可獨立使用 IPv4 Origin。未來若讓 Origin 直接具備 IPv6 路徑,Cloudflare IPv6 網段、WAN Rule、Origin Listener 與外部測試必須一起完成。
Cloudflare 會維護公開 IP 網段清單。Alias 應保存可追查的來源 URL、更新方式與最後同步時間,並在更新失敗時告警。這項規則只套用公開 Web Origin。OpenVPN、Bastion SSH 等服務具有自己的入口與來源政策。
來源 IP 白名單可以阻擋一般用戶端直接連向 Origin。需要更強的 Origin 身分驗證時,可以再導入 Authenticated Origin Pulls,讓 Nginx 於 TLS 階段驗證 Cloudflare 提供的 Client Certificate。Cloudflare Tunnel 則能以 Origin 主動建立的出站連線取代公開入站位址。今天先完成 Full (strict) 與來源網段限制,保留這兩種方式作為後續強化選項。
這也回答了開頭的問題。移除 DNS Record 只會讓一般解析器失去地址,不會停止已知 IP 上的服務。歷史 DNS、郵件記錄或其他服務也可能留下 Origin IP。真正的保護要放在連線路徑與應用程式本身:
curl --resolve 保留原主機名稱、SNI 與 Host,強制連向 Origin IP。連線應被防火牆阻擋。其中第一項直接封住已知 Origin IP 的繞過路徑,第五項則把這項安全條件變成可以重複驗證的負向測試。隱藏 Origin IP 可以降低被發現的機會,防火牆與 Origin 身分驗證才是持續有效的存取控制。
啟用橘雲後,Nginx 的 TCP Peer 是 Cloudflare,預設的 $remote_addr 因此會是 Cloudflare IP。Cloudflare 另外以 CF-Connecting-IP 傳遞原始訪客位址。Nginx 只有在直接 Peer 屬於可信 Cloudflare 網段時,才應採用這個 Header。
# 只有官方公布的 Cloudflare 網段可以提供替代來源位址
set_real_ip_from <Cloudflare IPv4 或 IPv6 網段>;
# 使用 Cloudflare 保存的原始訪客位址更新 $remote_addr
real_ip_header CF-Connecting-IP;
real_ip_recursive on;
| Nginx 變數 | 啟用 Real IP Module 後的意義 |
|---|---|
$remote_addr |
還原後的真實用戶端 IP |
$realip_remote_addr |
與 Nginx 直接建立 TCP 連線的 Cloudflare IP |
Nginx 轉送到 Web 後端時,直接以還原後的 $remote_addr 建立 X-Forwarded-For。Access Log 同時保存兩個位址、Host、請求、狀態與 Request ID,後續即可把 Cloudflare、Nginx 與應用程式事件沿著同一次請求串起來。
這個信任邊界也解釋了 Origin 來源限制的重要性:公開 Origin 若接受任意來源,攻擊者便能自行建立 CF-Connecting-IP Header。只信任 Cloudflare Peer 並封閉繞過路徑,Header 才能作為來源位址依據。
Web VIP 的接管機制已經建立。本節專注於加入 Cloudflare Edge、第二段 TLS 與 WAN Policy 後,從真正的外部網路量測使用者看到的結果。VRRP、GARP 與選舉原理沿用既有設計。
量測前先定義起點與終點:
| 指標 | 起點 | 終點 |
|---|---|---|
| 故障注入到公開服務恢復 | 停止目前持有 Web VIP 節點的 Nginx | 公開網址連續三次回傳 HTTP 200 |
| 使用者可見中斷時間 | 第一筆外部 HTTPS 請求失敗 | 公開網址連續三次回傳 HTTP 200 |
每次探測加入唯一 Query String 並要求不使用快取,同時記錄 HTTP Status、CF-Cache-Status 與回應中的後端身分。只有 DYNAMIC、BYPASS 或首次 MISS 等確實回源的結果納入計算。出現 HIT 便停止測試並先修正探測路徑。這樣會排除 Cloudflare Edge 的快取回應,量到今天新增後的完整公開路徑。
這項測試使用新的 HTTPS 請求觀察恢復。已建立的 TCP/TLS Session 會因代理節點故障而中斷,應用程式本身需要具備重新解析、重新連線與重試能力。
公開 HTTPS 適合依實際經過順序縮小問題範圍:
cf-ray,確認請求確實進入 Cloudflare Edge。Cloudflare 521/522 類型錯誤通常把排查方向帶到 Origin 拒絕連線或連線逾時。525/526 則優先檢查第二段 TLS。沿路徑確認每一段,比切換成 DNS only 或降低 Encryption Mode 更容易保留問題現場。
GitHub 實作文件:Day 27 Cloudflare 公開 HTTPS 完整步驟
Zone Status 成為 Active,建立指向 DDNS Hostname 的 Proxied CNAME Record。server_name、憑證與私鑰提供 TCP 443,先驗證設定再重新載入。CF-Connecting-IP 還原真實用戶端 IP。名稱伺服器與 DNS 快取更新需要時間。驗證時分開觀察委派、橘雲解析與 HTTPS 請求,避免只用瀏覽器成功畫面代替整條證據鏈。
本次實作使用橘雲,使公開 HTTP/HTTPS 請求進入 Cloudflare 的 Application Security 處理流程。Free Managed Ruleset 由 Free Plan 預設部署。為了留下可重現的 WAF 證據,另外建立只匹配 /day27-waf-proof 的 Custom Rule,從外部送出受控請求,再以 HTTP 403、cf-ray 與 Security Events 中相同的 Rule、主機名稱、Path 和時間交叉核對。
Cloudflare 已為這個 DNS 區域指派兩台權威名稱伺服器,註冊商保存相同設定。外部解析器查詢 NS 時也得到同一組結果。



圖(七)Cloudflare、GoDaddy 與外部 Resolver 顯示相同的兩台名稱伺服器,驗證委派設定已對外生效
從外部網路查詢公開 A Record,結果應為 Cloudflare Anycast IP,不直接顯示 Origin 公網 IPv4。接著以 curl 保留回應標頭,確認請求經過 Cloudflare 並取得網站內容。

圖(八)公開 A Record 回覆 Cloudflare Anycast IP。HTTPS 請求取得 HTTP 200、server: cloudflare、cf-ray 與 app01 後端身分
proxy01、proxy02 都要通過 Nginx 設定檢查並監聽 TCP 443。Origin Certificate 的 SAN 涵蓋公開主機名稱,期限與簽發者符合 Full (strict) 條件。

圖(九)proxy01 的 Origin Certificate 涵蓋 xianmantang.shop 與 *.xianmantang.shop,Nginx 設定、TCP 443 Listener 與健康檢查均正常。proxy02 的服務狀態與實際接管結果另由圖(十四)交叉驗證
Cloudflare Dashboard 顯示 Full (strict),外部用戶端則能驗證 Edge Certificate 並取得公開 HTTPS 回應。這兩項結果分別對應 Cloudflare 到 Origin、用戶端到 Cloudflare 的 TLS 狀態。


圖(十)Cloudflare 使用 Full (strict) 驗證 Origin。外部用戶端驗證公開 Edge Certificate 後取得 HTTP 200
CLOUDFLARE_IPV4 使用官方 IPv4 清單建立 URL Table Alias。WAN Rule 只允許這個 Alias 前往 TCP 443,DNAT 再將目的轉成 10.77.20.10:443。




圖(十一)Cloudflare IPv4 清單已載入執行階段。WAN Rule 與 Destination NAT 共同限制來源並將 TCP 443 轉向 WEB_VIP:443
同一台外部用戶端先以公開主機名稱成功連線,再用 curl --resolve 保留相同主機名稱與 TLS SNI、強制連向 Origin 公網 IPv4。前者成功且後者逾時,可以驗證公開服務可用,而且一般外部來源無法直接進入 Origin TCP 443。

圖(十二)同一台外部主機經 Cloudflare 取得 HTTP 200。保留相同主機名稱與 TLS SNI 強制直連 Origin 時得到 HTTP 000 與 curl rc=28
從外部送出帶有唯一測試字串的請求,再於目前持有 Web VIP 的 Proxy 查詢 Access Log。Log 中的用戶端 IP 應對應外部出口,Peer IP 則屬於 Cloudflare 網段。


圖(十三)相同 proof_id 將外部請求與 Nginx Access Log 對應起來。Log 同時保存真實用戶端、Cloudflare Peer、Host 與 HTTP 200
先確認 proxy01 持有 Web VIP,再從外部持續送出不使用快取且具有唯一 Query String 的 HTTPS 請求。停止 proxy01 Nginx 後,保留第一筆失敗、proxy02 接管 VIP、第一筆恢復與連續三次 HTTP 200 的時間。



圖(十四)19:36:24 停止 proxy01 Nginx。proxy02 於 19:36:29 進入 MASTER 並接管 Web VIP。外部探測量得故障注入到穩定恢復約 6.7 秒,第一筆失敗到穩定恢復約 6.5 秒
圖中的兩台狀態取自切換期間的不同時間點。最終由 proxy02 持有 Web VIP,並於外部探測中恢復 HTTP 200。
測試結束後重新啟動 proxy01 Nginx,設定檢查、健康檢查與服務狀態恢復正常。探測間隔為一秒,因此結果以約 6.7 秒與約 6.5 秒表達,不解讀為毫秒級精度。
建立只匹配 /day27-waf-proof 的 Custom Rule,從外部送出帶有唯一 Query String 的請求。Cloudflare 回覆 HTTP 403,Security Events 也以同一時間、用戶端 IP、主機名稱、Path、Query String 與 Ray ID 記錄 DAY27_WAF_PROOF 的 Block 動作。


圖(十五)HTTP 403 的 cf-ray、時間與請求條件可在 Security Events 找到對應事件,驗證 Custom Rule 實際命中並阻擋請求
| 正文主張 | 驗證方式 | 判讀結果 |
|---|---|---|
| 權威 DNS 已交由 Cloudflare | 比對 Cloudflare 指派值、註冊商設定與外部 NS 查詢 | 三處名稱伺服器一致 |
| 橘雲讓用戶端先連 Cloudflare | 外部查詢 A Record 與檢查回應標頭 | 回覆 Cloudflare IP 且具有 cf-ray |
| 公開請求進入 Cloudflare Edge | 檢查 Proxied 狀態、回應標頭、受控 Custom Rule 與 Security Events | 代理路徑成立,受控請求由 DAY27_WAF_PROOF 阻擋 |
| 兩段 TLS 都成立 | Full (strict)、Origin 憑證與外部 Edge 憑證 | 兩段各自完成憑證驗證 |
| Origin 只接受 Cloudflare 路徑 | 公開主機名稱正向測試與 --resolve 負向測試 |
公開成功、直接 Origin 逾時 |
| 真實用戶端 IP 可安全還原 | 比對外部出口與 Nginx Log | 用戶端與 Cloudflare Peer 可分辨 |
| 公開入口可隨 Web VIP 接管恢復 | 停止 Nginx 並持續送出外部請求 | proxy02 接管且公開 HTTPS 恢復 |
| 量測項目 | 本次結果 |
|---|---|
| 故障注入 | 2026-09-23 19:36:24.223(停止 proxy01 Nginx) |
| 第一筆外部失敗 | 2026-09-23 19:36:24.479,HTTP 521 |
| 備援節點接管 | proxy02 於 19:36:29 進入 MASTER |
| 第一筆穩定成功 | 2026-09-23 19:36:30.974,HTTP 200 |
| 穩定恢復判定 | 連續三次 HTTP 200,取第一筆成功時間 |
| 故障注入到穩定恢復 | 6.748 秒 |
| 使用者可見中斷時間 | 6.492 秒 |
| 探測間隔 | 1 秒 |
故障注入到穩定恢復從停止 Nginx 前記錄的時間開始計算,包含健康檢查、Keepalived 狀態轉換、VIP 接管,以及 Cloudflare 再次成功連上 Origin 的時間。使用者可見中斷則從外部探測第一次收到失敗開始計算,因此比前者少了約 0.256 秒。
切換期間出現 HTTP 521,表示 Cloudflare 當下無法與 Origin Web Server 建立連線。proxy02 接管 Web VIP 後,公開路徑恢復 HTTP 200。三次連續成功用來排除單次偶然回覆,實際計時取這組連續成功中的第一筆。由於探測間隔為一秒,本次結果適合以約 6.7 秒與約 6.5 秒解讀。
下一篇是 Day 28|PostgreSQL 資料誤刪如何復原?使用 pgBackRest、WAL Archive 與 PITR 回到指定時間點。公開入口與服務切換已經完成,接下來要替資料建立獨立的備份鏈,並實際還原到指定時間點。