---
title: "用 Cloudflare 实现 SaaS 自定义域名:配置、费用与限制 — Dardo"
description: "通过 Cloudflare for SaaS 让客户在您的 SaaS 中使用自己的域名:DNS 流程、证书验证、定价、根域名限制及替代方案。"
url: "https://dardo.studio/zh-Hans/blog/custom-domains-for-saas/"
language: "zh-Hans"
translations: {"en":"https://dardo.studio/en/blog/custom-domains-for-saas/","es":"https://dardo.studio/es/blog/dominios-personalizados-para-saas/","fr":"https://dardo.studio/fr/blog/domaines-personnalises-saas/","de":"https://dardo.studio/de/blog/custom-domains-saas/","it":"https://dardo.studio/it/blog/domini-personalizzati-saas/","pt":"https://dardo.studio/pt/blog/dominios-personalizados-para-saas/","nl":"https://dardo.studio/nl/blog/eigen-domeinen-voor-saas/","sv":"https://dardo.studio/sv/blogg/egna-domaner-saas-cloudflare/","pl":"https://dardo.studio/pl/blog/wlasne-domeny-klientow-saas/","uk":"https://dardo.studio/uk/blog/custom-domains-for-saas/","ru":"https://dardo.studio/ru/blog/custom-domains-for-saas/","ar":"https://dardo.studio/ar/blog/custom-domains-for-saas/","hi":"https://dardo.studio/hi/blog/custom-domains-for-saas/","th":"https://dardo.studio/th/blog/custom-domains-for-saas/","ja":"https://dardo.studio/ja/blog/custom-domains-for-saas/","ko":"https://dardo.studio/ko/blog/custom-domains-for-saas/","zh-Hant":"https://dardo.studio/zh-Hant/blog/custom-domains-for-saas/"}
updated: "2026-10-10T09:13:14.477Z"
---

[博客](https://dardo.studio/zh-Hans/blog/)

# SaaS 自定义域名:用 Cloudflare for SaaS 让客户使用自己的域名

用 Cloudflare for SaaS 让客户把自己的域名指向你的 SaaS:验证如何运作、截至 2026 年 10 月的费用,以及哪些地方容易出问题。

作者: [Nicolás Cerón](https://dardo.studio/zh-Hans/studio/) ·2026年10月10日

![夜晚街道上一排风格各异的店面,人行道下方的剖面图中,深红色线缆将每家店铺连接到同一个共用机房。](https://dardo.studio/_astro/01M4GYDRFXRY8D1WBNX295F126_2nc9Aq.webp)

## 简短回答

要让客户通过自己的域名(例如 `portal.customer.com`)访问你的应用,需要在你的 Cloudflare 区域(zone)中将该域名注册为自定义主机名。客户添加一条指向你的 CNAME 记录,Cloudflare 验证其对该主机名的控制权,由证书颁发机构签发证书,随后请求就会到达你的应用。

截至 2026 年 10 月,[Cloudflare for SaaS 套餐页面](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/plans/)显示,Free、Pro 和 Business 套餐包含 100 个自定义主机名,每增加一个收费 $0.10,这些套餐的主机名上限为 50,000 个。

有两个限制会影响所有设计方案。没有付费的 Enterprise 附加服务,客户无法把裸顶级域名(`customer.com`)指向你。而通配符自定义主机名、自定义证书以及证书颁发机构的选择,仅限 Enterprise 套餐。Cloudflare 的配置只需几个步骤,围绕它的产品工作则耗时更长,本指南大部分内容也正是围绕这一点。

## 什么是自定义主机名

自定义主机名是客户拥有的域名,由 Cloudflare 路由到你的区域。[设置指南](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/start/getting-started/)包含四个部分:

- **SaaS 区域。**你自己在 Cloudflare 上的域名,并已启用 Cloudflare for SaaS。Free 套餐的区域就足以起步。
- **回退源站。**一条经过代理的 DNS 记录,例如 `proxy-fallback.yourapp.com`,自定义主机名的流量会发往这里。
- **CNAME 目标。**可选项,是一个更易记的名称,供客户指向,例如 `customers.yourapp.com`。
- **自定义主机名。**客户的域名,通过 API 或控制台创建,有各自的验证状态。Cloudflare 会为每个主机名签发两张证书:一张 ECDSA P-256 主证书,以及一张供旧版客户端使用的 RSA 2048 位备用证书。

如果你的应用运行在 Cloudflare Workers 上(Dardo 也是基于这个平台构建的),[Worker 可以作为回退源站](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/worker-as-origin/)。`*/*` 路由会捕获所有自定义主机名的请求,你的代码读取 `Host` 请求头来识别租户。Cloudflare 也提供按主机名设置的自定义元数据,但这是付费的 Enterprise 附加服务,因此在其他套餐中,这类查询要放在你自己的数据库里,例如 D1。

## 流程如何运作

1. **客户在你应用的设置中输入域名。**你的后端对其进行规范化处理,然后调用 [Create Custom Hostname](https://developers.cloudflare.com/api/resources/custom%5Fhostnames/methods/create/) 接口,并指定证书验证方式。
2. **客户添加你提供的 DNS 记录**,例如 `portal.customer.com CNAME customers.yourapp.com`。
3. **Cloudflare 验证主机名的所有权。**CNAME 出现时会运行[实时验证](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/realtime-validation/),这可能导致短暂的停机。[预验证](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/pre-validation/)在 DNS 变更之前使用 TXT 记录或 HTTP 令牌,适用于已经上线的域名。如果客户自己的区域也在 Cloudflare 上(即“Orange-to-Orange”设置),则不支持预验证。
4. **证书颁发机构验证域名控制权**并签发证书。
5. **当** `**status**` **和** `**ssl.status**` **都为** `**active**`**,且 DNS 指向你的目标时,主机名即就绪。**Cloudflare 提醒,TLS 握手可能在 `ssl.status` 变为 active 之前就已成功,因此应以自定义主机名详情接口返回的结果为准。

### 证书验证方式

Cloudflare 的[验证指南](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/)提供以下选项:

| 方式      | 客户需要做什么                             | 能否在 DNS 切换前使用 | 说明                                                           |
| ------- | ----------------------------------- | ------------- | ------------------------------------------------------------ |
| HTTP,自动 | 只需添加 CNAME                          | 否             | 最简单。当客户“可以接受几分钟的停机”时,Cloudflare 建议使用这种方式。                    |
| HTTP,手动 | 如果域名已指向你,则无需任何操作;否则需要在其当前服务器上提供你的令牌 | 是             | 适用于域名正在其他服务商处运行的情况。                                          |
| TXT     | 添加你提供的 TXT 记录                       | 是             | 通配符主机名必须使用。                                                  |
| 委派 DCV  | 一次性添加一条 \_acme-challenge CNAME      | 是             | 让 Cloudflare 能够续期之后的所有证书。已有的 \_acme-challenge TXT 记录会导致无法使用。 |

验证不会无限期等待。Cloudflare 会在七天内重试主机名验证 75 次,并且根据其[退避计划](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/backoff-schedule/),“如果验证未成功,该自定义主机名将被删除。”证书令牌同样会过期:使用 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 个请联系销售) |
| 通配符自定义主机名      | 否      | 否      | 否        | 是                    |
| 自定义证书及可选 CA    | 否      | 否      | 否        | 是                    |
| 顶级域名代理 / BYOIP | 否      | 否      | 否        | 付费附加服务               |
| 自定义元数据         | 否      | 否      | 否        | 付费附加服务               |

套餐页面列出的 $0.10 没有注明计费周期。Cloudflare 在 [2022 年的公告](https://blog.cloudflare.com/waf-for-saas/)中称,价格从“每月 $2 降至 $0.10”。按这个月费计算,1,000 个客户域名意味着在包含的 100 个之外还有 900 个,即每月 $90。

有两条计费规则对产品设计很重要。根据 Cloudflare 的[配额与计费页面](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/quotas-and-billing/),每个主机名在删除之前都会计入用量,包括“等待验证或激活的主机名”。此外,非 Enterprise 套餐设有 API 强制阈值,超过后新的主机名会被拒绝。

## 哪里容易出问题

### 顶级域名

Cloudflare 的设置指南说得很明确:“默认情况下,不支持使用 A 记录指向目标。”大多数 DNS 服务商不允许在域名根部设置 CNAME,因此客户需要使用子域名,例如 `www.customer.com` 或 `app.customer.com`。[Apex proxying](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/apex-proxying/)会为你的账户分配静态 IP 前缀,让客户可以使用 A 记录,但它是企业版的附加功能,需要另外付费。如果没有它,就请客户使用子域名,并说明如何在其 DNS 服务商处把裸域名转发到该子域名。

### 证书颁发机构与 CAA 记录

Cloudflare 的[证书颁发机构参考文档](https://developers.cloudflare.com/ssl/reference/certificate-authorities/)列出了自定义主机名可用的 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 记录也会生效。[故障排查指南](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/troubleshooting/)列出了其他由客户一侧造成的故障:DNSSEC 配置错误,以及 DNS 服务器返回 SERVFAIL。

### 续期

自定义主机名证书的有效期为 90 天,可在到期前 30 天[续期](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/renew-certificates/)。处于活跃状态的非通配符主机名会通过 HTTP 自动续期。如果主机名不再处于活跃状态,例如客户更改了 DNS,客户就必须放置新的令牌,而把令牌发给客户是你的责任。通配符只能通过 TXT 续期,而 Delegated DCV 可以将这一过程自动化。

### 使用其他 CDN 或 Cloudflare 的客户

Cloudflare 表示,当其他 CDN 隐藏了 DNS 记录时,[使用其他 CDN 的自定义主机名并不兼容](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/)。域名托管在 Cloudflare 上的客户则会带来相反的问题:如果他们离开后你没有[删除其主机名](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/domain-support/remove-custom-hostnames/),即使他们更改了 DNS,该主机名仍可能继续路由到你的服务。

### 验证路径前的 Worker

如果你的回退源站是 Worker,它必须原样放行 `/.well-known/pki-validation/*` 和 `/.well-known/acme-challenge/*`。如果有一条兜底路由返回应用的 404 页面,就会导致 HTTP 验证失败。

## 围绕它的产品工作

- **套餐限制。**确定哪些套餐包含自定义域名、数量是多少,并在调用 Cloudflare 之前先检查。它的配额和阈值只是上限,并不是你的定价。
- **引导页面。**只需一个输入框。转为小写,去掉协议和路径,拒绝裸顶级域名(除非你购买了 apex proxying),也拒绝你自己的 zone 名称,Cloudflare 明确说明绝不要把它创建为自定义主机名。然后展示需要添加的准确记录,并提供复制按钮。
- **用通俗语言展示两种状态。**主机名和证书是分别验证的,所以两者都要展示。把 `ssl.validation_errors` 转换成操作说明:“您域名的 CAA 记录不允许我们的证书颁发机构,请添加这条记录”,比“pending\_validation”更有用。创建响应中可能还不包含验证记录,所以请稍等片刻后再次获取该主机名。Cloudflare 的[Webhook 通知](https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/webhook-definitions/)会报告验证和签发事件,比轮询更好。
- **续期监控。**每天运行一次任务,标记证书未处于活跃状态或 DNS 不再指向你的主机名,让你的团队比客户更早得知问题。
- **清理。**删除始终未通过验证的主机名,以及已离开客户的主机名。两者在删除之前都会计费。
- **租户隔离。**只根据你数据库中处于活跃状态的主机名来确定租户。如果租户还会获得你域名的子域名,Vercel 的[域名文档](https://vercel.com/docs/platforms/multi-tenant-platforms/configuring-domains)指出,某个租户为父域名设置的 Cookie 会影响其他租户,因此请把你的管理后台和登录放在单独的域名上。
- **支持手册。**为团队准备一页简短的文档,把每种错误对应到由谁来修复:缺少 CNAME、CAA、DNSSEC 和 SERVFAIL 由客户负责;令牌、CA 速率限制和 Worker 路由由你负责。

这正是 Dardo 在[Web 应用开发](https://dardo.studio/zh-Hans/services/web-app-development/)中所做的工作,而白标[客户门户](https://dardo.studio/zh-Hans/services/client-portal-development/)是最常被要求提供自定义域名的场景。

## 替代方案:Vercel 和 Netlify

如果你的应用已经运行在别处,这两个托管平台都能处理客户域名,截至 2026 年 10 月,它们各有文档中说明的限制。

|            | Cloudflare for SaaS                       | Vercel                                                                                       | Netlify                                                                                                                  |
| ---------- | ----------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| 域名限制       | 包含 100 个,免费版、Pro 和 Business 最多可达 50,000 个 | Hobby 版[每个项目 50 个](https://vercel.com/docs/limits);Pro 和企业版为“无限制”,软限制分别为 100,000 和 1,000,000 | “我们建议为一个站点分配的域名别名不超过 [50 个](https://docs.netlify.com/manage/domains/configure-domains/add-a-domain-alias/)”              |
| 顶级域名(Apex) | 企业版附加功能                                   | 将 [A 记录](https://vercel.com/kb/guide/a-record-and-caa-with-vercel)指向项目域名卡片上的值                | [ALIAS、ANAME 或扁平化 CNAME](https://docs.netlify.com/manage/domains/configure-domains/configure-external-dns/),或使用 A 记录作为备用 |
| 证书         | 自动签发,每个主机名两张;企业版支持自定义证书                   | 域名验证后自动签发;企业版支持自定义证书                                                                         | [自动使用 Let's Encrypt](https://docs.netlify.com/manage/domains/secure-domains-with-https/https-ssl/);自定义证书需手动续期            |
| 通配符        | 企业版                                       | 需要使用 Vercel 域名服务器,或委派 \_acme-challenge                                                       | 使用 Netlify DNS 的域名可自动支持                                                                                                  |
| 适用场景       | 同一个 zone 下有大量客户域名                         | 提供 REST API 和 SDK 的[多租户平台](https://vercel.com/docs/platforms/multi-tenant-platforms/limits)  | 每个站点最多几十个域名                                                                                                              |

Vercel 对顶级域名的支持是最明显的差异:客户可以用 A 记录将裸域名指向它。请注意,根据 Vercel 的[合理使用准则](https://vercel.com/docs/plans/hobby),Hobby 套餐仅限“非商业、个人使用”,所以付费的 SaaS 应从 Pro 起步。Netlify 建议最多 50 个别名,因此不适合用一个部署来服务数百个客户域名。

## 何时开始构建

如果只有两三个客户提出需求,就在 Cloudflare 控制台中添加他们的主机名,并维护一份检查清单。当自定义域名成为你所售套餐或白标方案的一部分时,再构建自助流程。如果客户需要大规模使用裸顶级域名或通配符,请在围绕这些限制做设计之前,先与 Cloudflare 洽谈企业版。

如果您希望把这套流程(包括上述的状态、提醒和支持说明)直接built进您的产品,请[告诉我们您的应用情况](https://dardo.studio/zh-Hans/contact/)。

[Nicolás Cerón](https://dardo.studio/zh-Hans/studio/)

Nicolás Cerón是Dardo的创始人,Dardo是一家位于哥伦比亚波哥大的品牌、网页设计与开发工作室。

## 继续探索。

- [服务 · **Web 应用、SaaS 与 MVP 开发**](https://dardo.studio/zh-Hans/services/web-app-development/)

- [你的项目 · **开始沟通**](https://dardo.studio/zh-Hans/contact/)
