部落格

SaaS 自訂網域:用 Cloudflare for SaaS 讓客戶使用自己的網域

透過 Cloudflare for SaaS,讓客戶把自己的網域指向你的 SaaS:驗證如何運作、截至 2026 年 10 月的費用,以及哪些地方會出問題。

作者: Nicolás Cerón ·

夜晚街道上一排風格各異的店面,人行道下的剖面圖中,深紅色纜線將每間店連接到同一個共用機房。

簡短回答

若要讓客戶用自己的網域(例如 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。

流程如何運作

  1. 客戶輸入網域,位置在你應用程式的設定頁。你的後端會將其正規化,並搭配憑證驗證方式呼叫 Create Custom Hostname 端點。
  2. 客戶新增你提供的 DNS 記錄,例如 portal.customer.com CNAME customers.yourapp.com。
  3. Cloudflare 驗證主機名稱的所有權。CNAME 出現時會執行即時驗證,這可能造成短暫停機。預先驗證則在 DNS 變更前使用 TXT 記錄或 HTTP 權杖,適用於已上線的網域。若客戶自己的 zone 也在 Cloudflare 上(即「Orange-to-Orange」架構),則不支援預先驗證。
  4. 憑證授權單位驗證網域控制權並核發憑證。
  5. 當 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 月)

FreeProBusinessEnterprise
內含主機名稱數100100100自訂
每個額外主機名稱的價格$0.10$0.10$0.10自訂
主機名稱上限50,00050,00050,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 SaaSVercelNetlify
網域數量限制內含 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 洽談企業版。

如果你想把這套流程直接整合進自己的產品,包含上述的狀態顯示、通知提醒與客服備註,歡迎跟我們聊聊你的應用程式。