全部在浏览器本地计算 · 数据不上传
首页 / 教程 / Cloudflare Pages 绑域名

Cloudflare Pages 绑定自定义域名:我踩过的四个坑

2026-11-15 · 约 6 分钟读完

Pages 部署本身很顺——wrangler pages deploy 一条命令就上线了。但从 xxx.pages.dev 换成自己的域名,我连着踩了四个坑,每个都卡了十几分钟。

坑一:wrangler 登录的权限不含 DNS

wrangler login 走的是 OAuth,授权范围包括 pages:write、zone:read、workers:write,但没有 dns:write。

结果是:我能把域名"添加"到 Pages 项目里,但 Pages 想自动创建那条 CNAME 时失败了——因为我这个调用方没权限。域名卡在 initializing,DNS 里空空如也。

解决办法:单独建一个 API Token,权限选 Zone → DNS → Edit,范围限定到那个域名。这个 token 后面加记录、改代理开关都能用。

坑二:手工加 CNAME 后,域名一直是 pending,访问返回 522

有 DNS 权限之后,我手工加了两条记录:

yuwenyule.top      CNAME  tools-site-2xt.pages.dev  🟠 已代理
www.yuwenyule.top  CNAME  tools-site-2xt.pages.dev  🟠 已代理

DNS 立刻生效了,解析到的是 Cloudflare 的 IP。但访问站点返回 522(连接超时)。

原因:Pages 侧的域名状态还是 pending,Cloudflare 不认为这个 hostname 归 Pages 管,于是当普通源站处理——把请求转发到 pages.dev,而 pages.dev 本身也是 Cloudflare 代理的域名,来回打转,最后超时。

522 不一定是源站挂了。在 Pages 场景下,"域名还没激活"也会表现为 522。

坑三:PATCH 重试无效,必须"删了重加"

Pages API 提供了一个 PATCH 接口用于重试验证:

PATCH /accounts/{account_id}/pages/projects/{project}/domains/{domain}

返回 200,状态还是 pending,等 40 秒再看,纹丝不动。

真正管用的是**先 DELETE 再 POST**:

DELETE /accounts/{id}/pages/projects/tools-site/domains/yuwenyule.top
POST   /accounts/{id}/pages/projects/tools-site/domains  {"name": "yuwenyule.top"}

删掉重加之后,60 秒内状态从 initializing 变成 active,站点立刻能访问。

猜测原因是:第一次添加时 DNS 记录还不存在,Pages 的验证失败并进入了死锁状态,只有重新走一遍流程才会重新检查。

坑四:100MB 和 25MB 两个限制

站里有几个客户端安装包要放,结果撞上两道墙:

限制数值影响
Pages 单文件25 MiB超过就部署失败
Cloudflare 代理单响应100 MB(免费版)文件能存到别处,但经 CF 代理下不下来

一个 138MB 的压缩包,两个限制都过不去。

解决办法:把文件放到独立服务器,DNS 记录设成"仅 DNS"(灰云),让流量直连源站,完全绕过 Cloudflare 的代理限制。

dl.yuwenyule.top  A  18.136.29.95  ⚪ 仅 DNS(灰云)

代价是失去了 CDN 缓存和 DDoS 防护,但下载站这点流量用一台 1TB/月的机器绰绰有余。

四条经验总结

现象真实原因解法
域名加不进去 / 没有 DNS 记录wrangler token 缺 dns:write建专用 API Token
访问返回 522Pages 域名还在 pending查 Pages domains 状态,别只看 DNS
PATCH 重试无效验证死锁删除后重新添加
大文件下载失败25MB / 100MB 限制独立服务器 + 灰云 DNS

查 Pages 域名状态可以用 API,比在控制台刷新快:

GET /accounts/{account_id}/pages/projects/{project}/domains

看 status 字段:initializing → pending → active,只有 active 才是真的好了。

这个站就是这么做出来的 看看成品