簡短回答
若要讓客戶用自己的網域(例如 portal.customer.com)來使用你的應用程式,你需要在 Cloudflare 的 zone 中將該網域註冊為自訂主機名稱(custom hostname)。客戶只要新增一筆指向你的 CNAME 記錄,Cloudflare 就會確認他們擁有該主機名稱的控制權,再由憑證授權單位核發憑證,請求便能開始抵達你的應用程式。
截至 2026 年 10 月,Cloudflare for SaaS 方案頁面顯示 Free、Pro 和 Business 方案包含 100 個自訂主機名稱,超出部分每個 $0.10,且這些方案的上限為 50,000 個主機名稱。
有兩項限制會影響所有設計。第一,客戶若要將根網域(customer.com)指向你,必須購買 Enterprise 付費附加元件。第二,萬用字元自訂主機名稱、自訂憑證以及憑證授權單位的選擇,都只限 Enterprise 方案。Cloudflare 的設定只需幾個步驟,圍繞它的產品工作則花費更多時間,本指南大部分內容也是在談這一塊。
什麼是自訂主機名稱
自訂主機名稱是客戶擁有的網域,由 Cloudflare 導入你的 zone。設定指南包含四個部分:
- SaaS zone。你自己放在 Cloudflare 上的網域,並已啟用 Cloudflare for SaaS。使用 Free 方案的 zone 即可開始。
- 後備來源(Fallback origin)。一筆啟用代理的 DNS 記錄,例如
proxy-fallback.yourapp.com,自訂主機名稱的流量會導向這裡。 - CNAME 目標。一個選用、較易懂的名稱,讓客戶指向,例如
customers.yourapp.com。 - 自訂主機名稱。客戶的網域,可透過 API 或儀表板建立,並有各自的驗證狀態。Cloudflare 會為每個主機名稱核發兩張憑證:ECDSA P-256 主要憑證,以及供舊版用戶端使用的 RSA 2048 位元備用憑證。
如果你的應用程式執行於 Dardo 所採用的平台 Cloudflare Workers,Worker 可以直接作為後備來源。*/* 路由會攔截所有自訂主機名稱的請求,你的程式碼再讀取 Host 標頭來找出對應的租戶。Cloudflare 也提供每個主機名稱專屬的自訂中繼資料,但那是 Enterprise 的付費附加元件,因此在其他方案中,這項查詢要放在你自己的資料庫,例如 D1。
流程如何運作
- 客戶輸入網域,位置在你應用程式的設定頁。你的後端會將其正規化,並搭配憑證驗證方式呼叫 Create Custom Hostname 端點。
- 客戶新增你提供的 DNS 記錄,例如
portal.customer.com CNAME customers.yourapp.com。 - Cloudflare 驗證主機名稱的所有權。CNAME 出現時會執行即時驗證,這可能造成短暫停機。預先驗證則在 DNS 變更前使用 TXT 記錄或 HTTP 權杖,適用於已上線的網域。若客戶自己的 zone 也在 Cloudflare 上(即「Orange-to-Orange」架構),則不支援預先驗證。
- 憑證授權單位驗證網域控制權並核發憑證。
- 當
status與ssl.status都是active,且 DNS 指向你的目標時,主機名稱即準備就緒。Cloudflare 提醒,在ssl.status變為 active 之前,TLS 交握可能就已成功,因此請以自訂主機名稱詳細資料端點的結果為準。
憑證驗證方式
Cloudflare 的驗證指南提供以下選項:
| 方式 | 客戶需要做的事 | DNS 切換前可用 | 備註 |
|---|---|---|---|
| HTTP,自動 | 只需新增 CNAME | 否 | 最簡單。Cloudflare 建議在客戶「能接受幾分鐘停機」時使用。 |
| HTTP,手動 | 若網域已指向你,則不需任何動作;否則需在現有伺服器上提供你的權杖 | 是 | 適用於網域已在其他供應商上線的情況。 |
| TXT | 新增你提供的 TXT 記錄 | 是 | 萬用字元主機名稱必須使用。 |
| 委派 DCV | 一次性新增一筆 _acme-challenge CNAME | 是 | 讓 Cloudflare 能續期之後的每一張憑證。若已有 _acme-challenge TXT 記錄,則無法使用。 |
驗證不會無限期等待。Cloudflare 會在七天內重試主機名稱驗證 75 次,而依據其退避時程,「若驗證未成功,自訂主機名稱將被刪除。」憑證權杖也會過期:使用 Let's Encrypt 為 7 天,使用 Google Trust Services 或 SSL.com 則為 14 天。
費用(截至 2026 年 10 月)
| Free | Pro | Business | Enterprise | |
|---|---|---|---|---|
| 內含主機名稱數 | 100 | 100 | 100 | 自訂 |
| 每個額外主機名稱的價格 | $0.10 | $0.10 | $0.10 | 自訂 |
| 主機名稱上限 | 50,000 | 50,000 | 50,000 | 無上限(超過 50,000 請聯絡業務) |
| 萬用字元自訂主機名稱 | 否 | 否 | 否 | 是 |
| 自訂憑證與可選擇的憑證授權單位 | 否 | 否 | 否 | 是 |
| 根網域代理 / BYOIP | 否 | 否 | 否 | 付費附加元件 |
| 自訂中繼資料 | 否 | 否 | 否 | 付費附加元件 |
方案頁面列出 $0.10 時並未註明計價週期。Cloudflare 在 2022 年的公告中說明,這是將價格「從每月 $2 降至 $0.10」。以此月費計算,1,000 個客戶網域代表超出內含的 100 個之外還有 900 個,即每月 $90。
有兩項計費規則對產品設計很重要。依據 Cloudflare 的配額與計費頁面,每個主機名稱在你刪除之前都會計入用量,包括「等待驗證或啟用中的主機名稱」。此外,非 Enterprise 方案設有 API 強制執行門檻,超過後新的主機名稱會被拒絕。
哪些地方會出問題
根網域
Cloudflare 的設定指南說得很清楚:「預設情況下,不支援使用 A 記錄指向目標。」多數 DNS 供應商不允許在網域根部設定 CNAME,因此客戶需要使用子網域,例如 www.customer.com 或 app.customer.com。Apex proxying 會為你的帳號分配固定的 IP 前綴,讓客戶可以使用 A 記錄,但這是企業版的加購項目,需另外付費。若沒有這項服務,請客戶改用子網域,並說明如何在他們的 DNS 供應商處將根網域轉址到該子網域。
憑證授權機構與 CAA 記錄
Cloudflare 的憑證授權機構參考文件列出自訂主機名稱可使用的 CA:Let's Encrypt(90 天憑證)、Google Trust Services 與 SSL.com(14、30 或 90 天)。只有企業版可以自行選擇 CA;其他方案則由 Cloudflare 使用預設 CA,並會先檢查 CAA 記錄。如果客戶的 CAA 記錄不允許該 CA,簽發就會失敗,並顯示「CAA records block issuance」,而且只有客戶本人能修正。CAA 查詢會沿著 CNAME 鏈進行,所以你自己目標網域的 CAA 記錄也會被納入。疑難排解指南還列出其他由客戶端造成的失敗原因:DNSSEC 設定錯誤,以及 DNS 伺服器回應 SERVFAIL。
續期
自訂主機名稱的憑證效期為 90 天,可在到期前 30 天續期。狀態為啟用中的非萬用字元主機名稱,會透過 HTTP 自動續期。如果主機名稱已不再啟用,例如客戶更改了 DNS,客戶就必須放置新的權杖,而你有責任將它傳送給客戶。萬用字元只能透過 TXT 續期,這正是 Delegated DCV 所自動化的部分。
使用其他 CDN 或 Cloudflare 的客戶
Cloudflare 表示,當其他 CDN 隱藏 DNS 記錄時,使用該 CDN 的自訂主機名稱並不相容。網域在 Cloudflare 上的客戶則會帶來相反的問題:如果他們離開後你沒有刪除他們的主機名稱,即使他們更改了 DNS,該主機名稱仍可能繼續導向你的服務。
驗證路徑前方的 Worker
如果 Worker 是你的備援來源,就必須將 /.well-known/pki-validation/* 與 /.well-known/acme-challenge/* 原封不動地放行。若有全部攔截的路由回應你應用程式的 404 頁面,HTTP 驗證就會失敗。
周邊的產品工作
- 方案限制。決定哪些方案包含自訂網域、數量多少,並在呼叫 Cloudflare 之前先檢查。Cloudflare 的配額和門檻只是上限,並不是你的定價。
- 引導畫面。只放一個輸入欄位。轉成小寫,去除通訊協定與路徑,除非你已購買 apex proxying,否則拒絕純根網域,並拒絕你自己的 zone 名稱,Cloudflare 明確表示絕不要將它建立為自訂主機名稱。接著顯示需要新增的確切記錄,並附上複製按鈕。
- 用白話呈現兩種狀態。主機名稱與憑證是分別驗證的,所以兩者都要顯示。將
ssl.validation_errors轉成操作說明:「您網域的 CAA 記錄不允許我們的憑證授權機構,請新增這筆記錄」比「pending_validation」好得多。建立回應可能尚未包含驗證記錄,所以請稍等片刻後再重新取得主機名稱。Cloudflare 的 webhook 通知會回報驗證與簽發事件,比輪詢更好。 - 續期監控。每天執行一次排程工作,標記憑證未啟用或 DNS 已不再指向你的主機名稱,讓你的團隊比客戶更早得知。
- 清理。刪除一直未通過驗證的主機名稱,以及已離開客戶的主機名稱。兩者在刪除之前都會持續計費。
- 租戶隔離。只從資料庫中啟用中的主機名稱來判定租戶。如果租戶同時也取得你網域的子網域,Vercel 的網域文件指出,某個租戶為上層網域設定的 cookie 會傳到其他租戶,因此請將你的後台與登入頁放在獨立的網域。
- 支援手冊。為團隊準備一頁簡短的說明,將每種錯誤對應到由誰處理:缺少 CNAME、CAA、DNSSEC 與 SERVFAIL 由客戶處理;權杖、CA 速率限制與 Worker 路由則由你處理。
這正是 Dardo 在網頁應用程式開發中會做的工作,而自訂網域最常被要求的場景,就是白標客戶入口網站。
替代方案:Vercel 與 Netlify
如果你的應用程式已在其他地方運行,這兩家主機服務都能處理客戶網域,並各有文件載明的限制(截至 2026 年 10 月)。
| Cloudflare for SaaS | Vercel | Netlify | |
|---|---|---|---|
| 網域數量限制 | 內含 100 個,Free、Pro 與 Business 最多可達 50,000 個 | Hobby 方案每個專案 50 個;Pro 與 Enterprise 為「Unlimited」,軟性上限分別為 100,000 與 1,000,000 | 「We recommend assigning no more than 50 domain aliases to a site」 |
| 根網域 | 企業版加購項目 | 使用 A 記錄指向專案網域卡片上的值 | ALIAS、ANAME 或攤平的 CNAME,或以 A 記錄作為備案 |
| 憑證 | 自動簽發,每個主機名稱兩張;自訂憑證需企業版 | 網域驗證後自動簽發;自訂憑證需 Enterprise | 自動使用 Let's Encrypt;自訂憑證需手動續期 |
| 萬用字元 | 企業版 | 需使用 Vercel 名稱伺服器,或委派 _acme-challenge | 使用 Netlify DNS 的網域可自動支援 |
| 適用情境 | 單一 zone 下有大量客戶網域 | 具備 REST API 與 SDK 的多租戶平台 | 每個網站最多幾十個網域 |
Vercel 對根網域的支援是最明顯的差異:客戶可以用 A 記錄將純網域指向它。請注意,依據 Vercel 的合理使用準則,Hobby 方案僅限「non-commercial, personal use only」,所以收費的 SaaS 應從 Pro 起步。Netlify 建議 50 個別名的上限,使它不適合用單一部署服務數百個客戶網域。
何時該著手開發
如果只有兩三位客戶提出需求,就在 Cloudflare 後台新增他們的主機名稱,並維護一份檢查清單。當自訂網域成為你銷售方案的一部分,或白標服務的一環時,再建立自助流程。如果客戶需要大規模的純根網域或萬用字元,請在圍繞這些限制進行設計之前,先與 Cloudflare 洽談企業版。
如果你想把這套流程直接整合進自己的產品,包含上述的狀態顯示、通知提醒與客服備註,歡迎跟我們聊聊你的應用程式。
