容器与平台

Cloudflare Pages 自定义域名与证书配置

作者: · 最后核实

Cloudflare Pages 的自定义域名证书由 Cloudflare 自己签发和续期。你在 Pages 项目里添加域名,Cloudflare 通过 HTTP 方式验证,再从合作 CA(Let's Encrypt、Google Trust Services 或 SSL.com)中挑一家签证书。根域名 example.com 必须是同一 Cloudflare 账户下的站点;子域名可以留在任何 DNS 服务商,只要加一条 CNAME 指向 项目名.pages.dev。

步骤和菜单名称以 Cloudflare 官方文档为准(截至 2026 年 11 月)。my-site.pages.dev 和 example.com 是示例。

速查表

问题 Cloudflare Pages 的做法
自动证书的 CA Let's Encrypt、Google Trust Services 或 SSL.com,由 Cloudflare 选择
验证方式 对自定义域名做 HTTP 验证
根域名 example.com 必须是 Cloudflare zone,CNAME 由 Cloudflare 自动创建
www 和其他子域名 CNAME 指向 my-site.pages.dev,DNS 可以不在 Cloudflare
CAA 要放行 letsencrypt.org、pki.goog; cansignhttpexchanges=yes、ssl.com
通配符自定义域名 Pages 文档没有介绍,每个主机名单独添加
上传自有证书 Pages 没有上传入口;站点级自定义证书面向 Business 和 Enterprise
每个项目的自定义域名数 Free 100、Pro 250、Business 和 Enterprise 500

国内访问说明

从中国大陆访问 pages.dev 和绑定到 Pages 的域名,速度和可用性都没有保证,不同地区、不同运营商差别很大,部分网络下可能打不开,这和证书配置无关。面向国内用户、需要 ICP 备案的网站,建议把静态资源放到阿里云、腾讯云等国内云的对象存储加 CDN,HTTPS 配置参考 腾讯云 CDN 配置 HTTPS 或 阿里云 CDN 配置 HTTPS。

第一步:先在 Pages 项目里添加域名

必须先在 Pages 控制台添加域名,再改 DNS:

  1. 进入 Workers & Pages,选择你的 Pages 项目。
  2. 打开 Custom domains,点 Set up a domain。
  3. 输入主机名,点 Continue。

如果跳过这一步,直接在 DNS 里加 CNAME 指向 my-site.pages.dev,这个主机名不会关联到你的项目,访问时会报 522 错误。

第二步:添加 DNS 记录

根域名必须接入同一个 Cloudflare 账户;子域名可以留在外部 DNS,加一条 CNAME 指向 my-site.pages.dev 就行。

根域名。 把 example.com 作为站点添加到 Cloudflare 账户,再到注册商(阿里云、腾讯云等)把 NS 改成 Cloudflare 分配的两个名称服务器。站点激活后,在 Pages 里确认域名时,Cloudflare 会自动创建 CNAME 记录。

子域名,DNS 留在外部。 在阿里云解析或 DNSPod 里加一条 CNAME:

类型 主机记录 记录值
CNAME shop my-site.pages.dev

如果这个域名已经在 Cloudflare 上,记录会自动添加。Enterprise 站点如果开了 zone hold,要先解除再添加域名,否则自定义子域名无法激活。

根域名和 www 一起用。 把根域名设为 Pages 自定义域名,再把 www 跳转过去。Cloudflare 的做法是建一条 Bulk Redirect:源 www.example.com,目标 https://example.com,状态码 301,勾选保留路径和查询参数;再给 www 加一条开启代理的占位记录:

类型 名称 IPv4 地址 代理状态
A www 192.0.2.1 Proxied

192.0.2.1 是文档保留地址,只起占位作用,请求会被 Cloudflare 代理直接用跳转响应。想让两个域名都直接提供内容,就把 www.example.com 也加成第二个自定义域名。

第三步:检查 CAA 记录

如果域名的 CAA 没有放行 Cloudflare 用的 CA,证书就签不出来。Pages 文档给出的完整写法是:

example.com.  300  IN  CAA  0 issue "letsencrypt.org"
example.com.  300  IN  CAA  0 issue "pki.goog; cansignhttpexchanges=yes"
example.com.  300  IN  CAA  0 issue "ssl.com"
example.com.  300  IN  CAA  0 issuewild "letsencrypt.org"
example.com.  300  IN  CAA  0 issuewild "pki.goog; cansignhttpexchanges=yes"
example.com.  300  IN  CAA  0 issuewild "ssl.com"

同一域名下还有别的业务在用其他 CA(比如国内云上买的证书),把对应的 issue 记录保留下来。Cloudflare 的排错文档提到,关闭了 Universal SSL 或者使用外部 DNS 服务商时,最容易出现 CAA 缺失的问题。可以用 CAA 检测工具 确认。

通配符和自有证书

Pages 文档只介绍了逐个添加主机名的方式,所以每个名字都要单独加一个自定义域名。在站点层面,完整接入(full setup)时 Universal SSL 覆盖根域名和一级子域名,更深层级的名字需要 Total TLS 或高级证书。

Pages 本身没有上传证书的地方。Cloudflare 的自定义证书上传是站点级功能,面向 Business 和 Enterprise 客户,而且 Cloudflare 不会替你续期。如果 Pages 站点必须使用某家 CA 的证书,买证书前先向 Cloudflare 确认它是否适用于你的 Pages 主机名。

验证

证书签发后,自定义域名返回由 Let's Encrypt、Google Trust Services 或 SSL.com 签发的有效证书。用 SSL 证书检查 检查,或在终端运行:

curl ssl.sh/example.com

再确认证书和签发 CA:

openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
  | openssl x509 -noout -issuer -subject -ext subjectAltName -dates

三家 CA 都可能出现,续期后还可能换一家,不要在客户端里固定(pin)某一家。

续期

不需要手动续期,签发和续期都由 Cloudflare 管理;以 Universal SSL 为例,Cloudflare 文档写明证书有效期 90 天,到期前 30 天开始自动续期。会出问题的是 DNS:把这个主机名改指到别处,Pages 自定义域名就会变成未激活,再改回来要等重新激活,期间访问会报错。想临时把流量切走,应该用 Origin Rule 或重定向规则,而不是改 DNS 记录。公开证书现在最长 200 天,2027 年 3 月 15 日起最长 100 天,Cloudflare 的 90 天证书已经满足。建议把域名加到 ssl.sh 监控(开发中),域名失效时能早点发现。

排查:一直停在 Verifying

域名停在 Verifying 阶段不动,按 Cloudflare 的清单逐项检查。

HTTP 验证被拦住。 Pages 需要访问域名上的一个 HTTP 地址来验证。Cloudflare Access、重定向规则、Worker、WAF 自定义规则或 Client-Side Security 的内容规则挡在前面,验证就完成不了。用下面的命令测试:

curl -s -o /dev/null -D - https://example.com/.well-known/acme-challenge/randomstring

如果返回 302 并跳到 cloudflareaccess.com,说明是 Access 拦截了。先暂时关掉对应的 Access 策略(或重定向、Worker),等验证通过再打开。

缺少 CAA 记录。 对根域名(子域名单独建了 zone 的就查子域名)运行 dig CAA example.com。比如只有一条 0 issue "amazon.com",Cloudflare 的三家 CA 就全被挡住了,按第三步加上 6 条记录。详见 CAA 记录阻止签发。

zone hold。 设置期间先解除,域名激活后再恢复。

只有自定义域名报错。 my-site.pages.dev 正常、自定义域名异常时,说明是站点(zone)上的缓存、规则等设置作用在了开启代理的记录上。把记录临时改成 DNS only 测试,再回头检查站点配置。

以上都检查过,超过 15 分钟仍在 Verifying,就联系 Cloudflare 支持。

常见问题

Cloudflare Pages 自定义域名的证书是哪家 CA 签的?

由 Cloudflare 在三家 CA 中选择。它的公开信任证书来自 Let's Encrypt、Google Trust Services 或 SSL.com,所以 Pages 文档的 CAA 示例把三家都列上了。想知道你的域名现在用的是哪家,运行 curl ssl.sh/example.com 看颁发者。

不把 DNS 迁到 Cloudflare,能给 Pages 绑根域名吗?

不能。Cloudflare 文档要求根域名必须是同一账户下的 zone,并且注册商处的 NS 已改成 Cloudflare 的。只有子域名可以留在阿里云解析、DNSPod 等外部 DNS,用 CNAME 指向 项目名.pages.dev。

域名在 Verifying 状态停多久算不正常?

正常几分钟就会过。检查过 HTTP 验证路径、CAA 记录和 zone hold 之后,超过 15 分钟还在 Verifying,Cloudflare 建议去它的 Discord 或提交工单。

能给 Pages 域名上传自己的证书吗?

Pages 设置里没有上传入口。上传自定义证书是 Cloudflare 站点(zone)级别的 SSL/TLS 功能,面向 Business 和 Enterprise 套餐,Pages 文档也没有介绍它和 Pages 自定义域名搭配使用的方法。

资料来源

  1. Cloudflare Pages: Custom domains
  2. Cloudflare Pages: Debugging Pages
  3. Cloudflare Pages: Redirecting www to domain apex
  4. Cloudflare SSL/TLS: Certificate authorities
  5. Cloudflare SSL/TLS: Universal SSL
  6. Cloudflare SSL/TLS: Custom certificates