type
status
date
slug
summary
tags
category
icon
password
最近将博客从Vercel迁移到了Cloudflare Pages,原因是Vercel的每个月免费边缘请求数量已经满足不了小博客的成长所需,而Vercel最低的付费门槛又很高,正巧NotionNext又支持静态部署在Cloudflare Pages,所以决定尝试一下。但问题来了:传统做法是将回源域名CNAME直接指向
xxx.pages.dev,但这样做会导致522错误,因为Cloudflare Pages无法绑定@记录的根域名,除非将域名迁移到Cloudflare。Cloudflare不认识你的自定义域名,自然也就会拒绝请求。经过一番折腾,我找到了一个暂时完美的解决方案:Cloudflare for SaaS(Custom Hostnames)+ Workers代理。这个方案可以让国内域名在不转移DNS托管的情况下,完美使用Cloudflare CDN加速国内访问Cloudflare Pages。
本文将详细记录整个配置过程以及踩过的坑。
📝 方案原理
为什么直接CNAME到Cloudflare Pages不行?
当你将国内域名直接CNAME指向
xxx.pages.dev时:- 用户访问
deeprouter.org
- DNS解析到Cloudflare Pages服务器
- 请求到达Cloudflare Pages, 但HTTP Host头是
deeprouter.org,通过Curl -I可以查询到。
- Pages检查发现没有绑定
deeprouter.org→ 返回 522/404 错误
SaaS 回源 + Worker方案如何解决?

核心思路:
- 准备一个已托管在Cloudflare 的域名(如
new.site)作为回源域名
- 配置Custom Hostname,让Cloudflare为国内域名签发SSL证书
- 使用Worker拦截请求,将Host头改为
xxx.pages.dev
- 国内域名CNAME指向回源域名
这样Pages收到的请求Host头是
xxx.pages.dev,就能正常响应了。📝 前置条件
在开始配置之前,请确保你具备以下条件:
条件 | 说明 |
Cloudflare 账号 | 免费版即可 |
一个托管在 Cloudflare 的域名 | 作为回源域名,如 new.site |
一个国内注册的域名 | 需要加速的目标域名,如 deeprouter.org |
Cloudflare Pages 项目 | 已部署的网站,如 notion*****.pages.dev |
📝 配置步骤
步骤一:配置回源域名的DNS记录
首先需要为回源域名(
new.site)添加一条A记录,用于触发Worker。进入Cloudflare Dashboard → 选择
new.site → DNS → 添加记录类型 | 名称 | 内容 | 代理状态 |
A | @ | 192.0.2.1 | 已代理(橙色云朵) |
重要:
192.0.2.1 是一个保留 IP,不会真正路由到任何服务器。我们只需要它触发 Cloudflare 代理,让 Worker 能够拦截请求。步骤二:创建Cloudflare Worker
进入Cloudflare Dashboard → Workers & Pages → 创建Worker
给Worker起一个酷炫且易于识别的名字(如
pages-proxy),然后替换为以下代码:常见错误:
TARGET_HOST 只能填写纯域名(如 notionnext-8nt.pages.dev),不能带 https:// 或末尾斜杠,否则会导致 522 错误。点击 保存并部署。
步骤三:配置Worker路由
这应该是整个过程中最容易遗漏的一步。在Cloudflare Worker创建后,需要绑定路由才能生效。
进入Cloudflare Dashboard →
newtomy.site → Workers 路由 → 添加路由添加以下路由规则:
路由 | Worker | 说明 |
new.site/* | pages-proxy | 回源域名路由 |
*.new.site/* | pages-proxy | 回源域名路由 |
deeprouter.org/* | pages-proxy | 加速域名路由 |
*.deeprouter.org/* | pages-proxy | 加速域名路由 |
关键点:必须为需要加速的国内域名
deeprouter.org/* 单独添加路由!因为尽管配置了Custom Hostname,但那只管 SSL证书,不会自动触发我们配置好的Cloudflare Worker。步骤四:配置Custom Hostname(SaaS回源)
这一步让Cloudflare为国内域名签发SSL证书。
进入Cloudflare Dashboard →
new.site → SSL/TLS → Custom Hostnames4.1 配置 Fallback Origin
首先设置回源地址:
- Fallback Origin:
new.site
等待状态变为Active。
4.2 添加 Custom Hostname
点击 Add Custom Hostname,输入:
- Custom Hostname:
deeprouter.org
Cloudflare 会提供验证记录,你需要在国内 DNS(如 DNSPod)添加对应的 TXT 记录来完成验证。
验证记录通常类似:
添加后等待几分钟,状态会变为:
- Certificate status: Active
- Hostname status: Active
步骤五:配置实际访问域名的DNS
这是最后一步,也是最容易出错的一步。进入你的国内域名DNS管理后台(例如我的是DNSPod),修改域名的解析记录:
主机记录 | 记录类型 | 记录值 |
@ | CNAME | new.site |
www | CNAME | new.site(可选) |
常见错误:很多人会把CNAME直接指向
xxx.pages.dev,但是这正式出现522错误的根源之一。实际访问的域名,也就是需要加速的域名必须指向回源域名 newtomy.site,流量才能经过Worker处理。📝 验证配置
等待DNS生效后(通常几分钟),使用以下命令测试:
如果配置正确,两个域名都应该返回
HTTP/2 200状态码。📝 配置Saas回源加速
在验证配置环节没有问题后,可以实际访问的域名DNS记录修改为优选域名,例如
csgo.com、linux.do等,从而优化Cloudflare CDN在国内的访问速度。📝 常见问题排查
问题一:522错误
可能原因及解决方案:
原因 | 排查方法 | 解决方案 |
DNS指向错误 | 检查CNAME是否指向 pages.dev | 改为指向回源域名 |
Worker代码错误 | 检查 TARGET_HOST是否带 https:// | 只填写纯域名 |
Worker路由缺失 | 检查是否为国内域名添加了路由 | 添加 deeprouter.org/* 路由 |
代理未开启 | 检查A记录是否为橙色云朵 | 开启Cloudflare代理 |
问题二:SSL 证书错误
可能原因:
- Custom Hostname验证未完成
- TXT验证记录填写错误
解决方案: 检查Custom Hostnames页面,确认Certificate status和Hostname status都是Active。
问题三:回源域名可以访问,国内域名不行
原因:Cloudflare Worker路由没有包含国内域名。
解决方案: 在Cloudflare Workers Routes 中添加你需要加速的域名(非回源域名) → 你的Worker。
🤗 总结归纳
这个方案的核心思路是利用Worker 作为"中间人",将请求的Host头修改为Pages认可的域名,从而绕过Pages的域名验证限制。
整个配置过程中最容易踩的三个坑:
- DNS指向错误:必须指向回源域名,不能直接指向
pages.dev
- Worker 代码 bug:
url.hostname只接受纯域名
- Worker 路由缺失:必须为国内域名单独添加路由
📎 参考文章
有关Cloudflare SaaS 回源或 Workers 使用的问题,欢迎您在底部评论区留言,一起交流~
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!