Cloudflare优选加速网站访问
把 Cloudflare 上的网站解析到国内连得更快的 Cloudflare IP。先讲清任播和小黄云的原理,再按官方文档和实测整理 SaaS 自定义主机名的做法、踩到的坑和测速结果,附 Worker 路由与 R2 两种做法。
这套做法最早是在张萌萌的《Cloudflare 低延迟接入方案》里看到的,它参考的是二叉树树的《试试Cloudflare IP优选!让Cloudflare在国内再也不是减速器!》,原理和大部分做法都出自后者。本文按 Cloudflare 官方文档逐条核对后重新整理,并在自己的域名上实测。
Cloudflare 与优选
Cloudflare 是一家做 CDN 和网络安全的公司,机房分布在全球 300 多个城市。把域名的 NS(Name Server)交给它之后,它就是这个域名的权威 DNS。给DNS记录开小黄云,就可以享受Cloudflare的缓存、HTTPS 证书、DDoS 防护。

任播(Anycast)
平时接触的 IP 大多是单播(Unicast):一个 IP 只在一个地方。任播(Anycast)反过来,同一个 IP 同时放在很多个地方,数据发过去,会被送到其中离发送者近的那一个。
能这么做,是因为 IP 并不绑在某个物理位置上。互联网上各家网络会互相宣布「某某网段在我这儿」(这套协议叫 BGP),路由器按收到的宣布记路。任播的网段有很多个地方同时宣布,路由器就按自己的规则挑一条,通常挑经过的网络最少的那条,但运营商也会按费用、互联协议这些因素另选。打个比方,全国各地拨 110,号码都一样,接通的却是本地的警局。
不同网段从国内连过去,落到的机房和走的线路并不一样。优选就是挑出从国内连得更快的那批 IP,把域名解析过去。
实现原理
开了小黄云,Cloudflare 就站到读者和源站中间当一个反向代理:

图源:Cloudflare 官方文档《How Cloudflare works》,按 CC BY 4.0 使用。
小黄云其实同时管着两件事:
| 开小黄云 | 关闭小黄云 | |
|---|---|---|
| DNS 解析 | Cloudflare 的默认 IP | 你填的 IP |
| 代理 | 机房接手请求,缓存、规则在这一步生效,再转给源站 | 指向源站时,请求直接去源站;指向 Cloudflare 的 IP 时,机房不处理,返回 Error 1000 |
我们要做的是既希望Cloudflare代理我们的流量,也希望能指定一条更快的线路给国内用户访问。
但是正常来说,开着小黄云,解析结果无法控制;关了小黄云,请求就算指定到达 Cloudflare 的机房,可 Cloudflare 不知道这个主机名该交给谁,就会返回 Error 1000「DNS points to prohibited IP」
所以优选的核心是:找一个不开小黄云、也能让 Cloudflare 代理这个主机名的办法。
| 做法 | 适合 | 和官方文档的出入 |
|---|---|---|
| SaaS 自定义主机名 | 源站是自己的服务器 | 功能是官方的,但官方要求自定义主机名 CNAME 到 CNAME 目标,改指优选 IP 不在官方说明里 |
| Worker 路由 | 网站本身就是 Worker | 官方要求路由的主机名有一条开了小黄云的记录 |
| R2 + Cloud Connector | R2 存储桶 | 官方同样要求主机名开小黄云 |
警告
这三种做法靠的都是官方没写明的行为,更像是 Cloudflare 没堵上的口子,而不是给你用的功能。哪天收紧了,优选就会失效,表现就是 Error 1000。
访问路径
| 路径 | 好处 |
|---|---|
| 读者 → Cloudflare 机房 | 换成从国内连得更快、丢包更少的机房 |
| Cloudflare 机房 → 源站 | 命中缓存,访问就更快 |
Cloudflare 默认不缓存 HTML,只按扩展名缓存图片、CSS、JS、字体这些静态文件。想让 HTML 也缓存,要么源站返回 Cache-Control: public, max-age=…,要么在 Cloudflare 里加一条缓存规则(Cache Rules),配法见文末的实测。
优选 IP 从哪来
我在《开源工具收藏》里收过几个相关项目:
| 来源 | 工具 / 服务 |
|---|---|
| 社区的优选域名 | cf.090227.xyz 等 |
| 自己测优选 IP | XIU2/CloudflareSpeedTest、badafans/better-cloudflare-ip |
| 自动测速并更新 DNS | ZhiXuanWang/cf-speed-dns |
自己测出来的只是你这条网络的优选 IP,电信、联通、移动的结果可能完全不同。用 CloudflareSpeedTest 测之前记得关掉代理软件,否则测的是代理。
建议直接使用社区优选域名,综合访问速度更快。
做法一:SaaS 自定义主机名
先认识 Cloudflare for SaaS
Cloudflare for SaaS 是 Cloudflare 给 SaaS 服务商(在线建站、网店系统这类)的功能,用来支持客户用自己的域名访问。官方服务商指南里列了 Shopify、Webflow、HubSpot、WP Engine 等 8 家,比如在 Webflow 上绑自己的域名,它会让你加一条 CNAME 指向 cdn.webflow.com。
客户的域名不在服务商的 Cloudflare 账号里,服务商没法替它开小黄云。如果客户的域名也在 Cloudflare 上,这种跨账号的 CNAME 还会直接报 Error 1014,官方给的解决办法就是服务商开通 Cloudflare for SaaS:服务商在自己的区域(Zone,也就是接入 Cloudflare 的那个域名)里,把客户的域名添加为自定义主机名(Custom Hostname),客户照旧 CNAME 过来,Cloudflare 查到这条登记,就会代理它、签证书,再转给服务商的源站。

图源:Cloudflare 官方文档《Cloudflare for SaaS》,按 CC BY 4.0 使用。下面两张同。
关键:机房肯不肯代理,看的是有没有添加为自定义主机名,不看这个主机名有没有开小黄云。
拿来做优选时,服务商和客户都是你自己。后台会碰到三个名字:
| 后台字段 | 是什么 | 在案例里 |
|---|---|---|
| 自定义主机名(Custom Hostname) | 让 Cloudflare 代理的主机名 | www.cogrise.top,读者访问的地址 |
| 回退源(Fallback Origin) | 代理之后默认把请求转给谁 | origin.detached.com,指向源站服务器 |
| CNAME 目标(CNAME Target) | 官方让自定义主机名 CNAME 过去的地址 | 本文直接用回退源 origin.detached.com |
准备两个域名
| 主机名 | DNS 托管在 | 指向 | 小黄云 |
|---|---|---|---|
origin.detached.online | Cloudflare | 源站服务器的 IP | 开 |
www.cogrise.top | Cloudflare 以外,比如阿里云解析 | 优选 IP(A 记录),或社区的优选域名(CNAME) | 无 |
www.cogrise.com 必须托管在 Cloudflare 以外,原因见后面的「实测踩到的两个坑」。另外,自定义主机名不能是 detached.online 本身,官方写明它不能和开通 SaaS 的域名相同。
1、开通 Cloudflare for SaaS
在 detached.online 的 SSL/TLS → 自定义主机名里点启用。非企业版要先填付款信息;Free、Pro、Business 都包含 100 个自定义主机名,超出部分每个 $0.10,个人站点用不到收费。


2、设置回退源
把 origin.detached.online设为回退源,等状态变成「有效」。回退源不是「有效」,自定义主机名就无法完成验证。

自定义主机名只让 Cloudflare 肯代理,请求送到哪台服务器由回退源决定。只有一个源站的话,直接拿真实源站当回退源最简单。
3、添加自定义主机名
添加 www.cogrise.top,源服务器选默认(也就是回退源)。

| 状态 | 说明 |
|---|---|
| 主机名状态 | 这个域名归你,允许 Cloudflare 代理它 |
| 证书状态 | 让证书颁发机构给 www.cogrise.top 签 HTTPS 证书 |
主机记录
origin.detached.online A 35.212.212.171 开小黄云
www.cogrise.top A 任意CF机房IP
读者解析 www.cogrise.top 得到优选 IP,到达 Cloudflare 的机房 → www.cogrise.top 所在的域名不在 Cloudflare 上,Cloudflare 就去查自定义主机名,查到了 → 转给回退源 origin.detached.online → 源站。
实测踩到的两个坑
坑一:同一个域名里,关闭小黄云的记录 CNAME 到开了小黄云的记录,会直接解析成源站 IP
origin.maluyao.top A 35.212.212.171 开启小黄云
www.maluyao.top CNAME origin.maluyao.top 关闭小黄云

坑二:主机名所在的域名托管在 Cloudflare 时,只能 CNAME 到开了小黄云的主机名,指向 Cloudflare 的 IP 一律 Error 1000
| 主机名 | 它的 DNS 记录(都关闭小黄云) | 结果 |
|---|---|---|
www.cogrise.top | A → Cloudflare IP | Error 1000 |
www.cogrise.top | CNAME → cf.090227.xyz | Error 1000 |
www.cogrise.top | CNAME → origin.detached.online | 正常 |
www.cogrise.top | A → origin.detached.online 解析出的两个 Cloudflare IP | Error 1000 |

最后一行最能说明问题:A 记录填的就是 CNAME 到回退源时解析出的同两个 IP,结果却不一样,说明 Cloudflare 看的是这个域名自己区域里的那条记录,而不是请求最后到了哪个 IP。只要读者访问的主机名所在的域名也托管在 Cloudflare,Cloudflare 就先按那个区域的记录处理,记录关闭小黄云、又指向 Cloudflare 的 IP,就判为 Error 1000,轮不到自定义主机名。
做法二:Worker 路由(未实测)
1、在 Worker 的设置里添加一条路由(Route):
www.你的域名.com/*结尾的 /* 要带上,官方说明不带通配符的模式只匹配那一个精确路径。不用自定义域,是因为它会由 Cloudflare 自动建一条开了小黄云的记录,没法改指优选。
2、DNS 里加一条:
www.你的域名.com CNAME cf.090227.xyz 关闭小黄云官方文档写的是「所有用来调用 Worker 的域名和子域名都必须有一条开了小黄云的 DNS 记录」,关闭小黄云时能生效是社区发现的行为。做法一的坑二对这里是否同样成立,我没有测。
几点补充:
1、免费版每天 10 万次请求、每次 10ms CPU 时间。超额后看路由的失败模式:fail open 就当没有 Worker,fail closed 返回 1027 错误。
2、Pages 项目可以按官方指南迁到 Workers 再照上面做;不想迁的话,写一个 Worker 把请求转发到 项目名.pages.dev,再给它加路由。
3、源站不在 Cloudflare 的网站也能借 Worker:让 Worker 当反向代理转发到源站,或者用官方的「Worker 作为 SaaS 源站」。张萌萌那篇说「SaaS 不支持 Workers / Pages」,是不对的。
做法三:R2 存储桶(未实测)
1、给存储桶绑一个自定义域,比如 r2.你的域名.com。官方要求这个域名和存储桶在同一个 Cloudflare 账号下;r2.dev 的地址是限速的,只给开发用。
2、在域名的 规则 → Cloud Connector 里新建规则:提供商选 Cloudflare R2,选这个存储桶,匹配条件写最终访问的主机名,比如 fast-r2.你的域名.com。Cloud Connector 目前是 Beta,所有套餐都能用(Free 版最多 10 条规则),存储桶要公开可访问。
3、DNS:
fast-r2.你的域名.com CNAME cf.090227.xyz 关闭小黄云官方文档同样写明 Cloud Connector 要求主机名开小黄云,关闭小黄云时能用是社区做法,坑二是否成立也没有测。
本站实测
2026-10-21 用 itdog 测了两个地址,同一份博客首页:
| 地址 | 怎么到源站 |
|---|---|
detached.online | 不经过 Cloudflare,直连源站(美国) |
www.cogrise.top | 使用第一种方式,DNS 在阿里云,CNAME 到社区的优选域名 cf.090227.xyz,经 Cloudflare 回源到同一台 GCP,HTML 由 Cloudflare 缓存 |
提示
缓存规则配置:在开通 SaaS 的域名里,缓存 → Cache Rules → 新建规则,匹配「主机名 等于 www.cogrise.top」,缓存资格选「符合缓存条件」,边缘 TTL 选「忽略缓存控制标头,使用此 TTL」并设为 1 天。
TCPing
测的是和目标 80 端口建立一次 TCP 连接要多久。
直连源站:

社区优选域名:

HTTP
只请求首页 HTML 这一个文件,不含图片、CSS、JS。
直连源站:

社区优选域名:

最后总结
这篇文章也是憋了很久才发出来,一方面是因为实测的时候踩坑了,第一种方法一直Error 1000,就是下面表这样,我以为只要换一下 IP 这么简单,没想到这个已经补上漏洞,所以我一开始就不顺利:
| 主机名 | 它的 DNS 记录(都关闭小黄云) | 结果 |
|---|---|---|
www.cogrise.top | A → Cloudflare IP | Error 1000 |
www.cogrise.top | CNAME → cf.090227.xyz | Error 1000 |
www.cogrise.top | CNAME → origin.detached.online | 正常 |
www.cogrise.top | A → origin.detached.online 解析出的两个 Cloudflare IP | Error 1000 |
之后的话就是因为工作实在是太忙了,根本没有功夫来做这个,所以一直拖到了这个周末,剩下两个做法我就没有实测了,实在是精力有限,加上这个拖得时间太长了没有激情了,今天勉强把第一个补充完成(从实测到完成又是隔了好几天了)
| 来源 | 用到的内容 |
|---|---|
| 二叉树树:试试Cloudflare IP优选! | 原理、SaaS / Worker / R2 各种做法 |
| 张萌萌:Cloudflare 低延迟接入方案 | 最早看到这套做法的地方 |
| CloudflareSpeedTest README | 测速前关掉代理软件 |
| Cloudflare for SaaS | 功能介绍、官方示意图 |
| Cloudflare for SaaS 入门 | 回退源必须开小黄云、自定义主机名不能和开通 SaaS 的域名相同、两项验证 |
| 验证重试表 | 验证失败后的重试间隔 |
| Error 1000、Error 1014 | 指向 Cloudflare IP、跨账号 CNAME 的报错 |
| Workers 路由 | 路由要求开了小黄云的记录、通配符规则 |
| Flexible 模式 | 不能用的两种情况 |
| China Network | 官方的境内方案:Enterprise、ICP 备案 |
评论
评论加载中……