Cloudflare 国内访问慢,是用它做部署的开发者最常搜的问题之一。结论先说:能用,但不稳;慢的原因在线路,不在你的配置。下面是原因、我们的实测和三条出路。

Cloudflare 国内能不能访问

能。本站就托管在 Cloudflare Pages 上,国内大部分时候能打开。问题在于稳定性:我们测过一个放在 Workers 上的接口,从国内请求,有 10% 到 45% 的请求直接失败,成功的响应时间在 1 到 11 秒之间来回抖。

对内容站来说,这种波动多数时候能忍;对要求几百毫秒内返回的接口,就是用户能明显感觉到的卡顿和失败。

Cloudflare 国内访问慢的原因

Cloudflare 官方文档的说法是:要给中国大陆用户快速、安全地提供内容,需要在中国境内有基础设施;经过境外服务器绕行的流量,会遇到明显的延迟和可靠性问题。

它在中国大陆确实有节点,叫 China Network,由合作方京东云运营。但文档写明,这项服务只对企业版客户单独订阅开放,而且接入的每个主域名都要有 ICP 备案或许可证。免费版和普通付费版的国内访问者,请求都要绕到境外节点,高峰期延迟和丢包会明显上升。

所以这不是换个设置就能解决的问题。想要国内稳定,要么让请求在进入 Cloudflare 之前少走一段慢路(香港中转),要么干脆不经过它(搬到境内)。

Pages 和 Workers:一定要绑自己的域名

workers.dev 是 Cloudflare 给每个账号分配的默认子域名。官方文档建议生产环境用路由或自定义域名,而不是 workers.dev,并说明 workers.dev 被当作免费站点对待,面向个人和非关键项目。

我们还遇到过更直接的问题:从境内服务器请求 workers.dev 地址,超时连不上。所以对外提供服务,至少绑一个自己的域名;Pages 也一样,本站用的就是自己的域名。

实测:接口从 Workers 搬到境内服务器

我们有一个识别类接口原来跑在 Cloudflare Workers 上,国内用户反馈「慢,经常要等 10 秒以上,还时不时识别不到」。查下来识别逻辑本身一直是好的,慢和失败都出在国内手机到 Cloudflare 这一段。

处理办法是逻辑不动、只换托管:

  • Worker 的代码只用了 Web 标准接口,在境内轻量服务器上用一个几十行的适配层,把它跑在 Node.js 上。
  • 前面放 Caddy 做反向代理,自动申请和续期证书。
  • 把接口域名的解析改到这台服务器,客户端不用发版,所有版本立即生效。

改完以后,国内响应从经常 10 秒以上变成稳定在 1.2 秒左右。过程中踩了三个坑:

  1. 防火墙没放行 443:手机上报连接被关闭,看着像线路问题,其实是轻量服务器的控制台防火墙默认没开 443。国外节点也连不上时,先查防火墙。
  2. 本机测不准:电脑开着代理,解析和连接都被接管,测不出真实的国内直连情况。改用服务器本机和第三方节点测,手机关掉代理测。
  3. 境内后端不能回连 Cloudflare:原来有几个路由会把请求转回 Cloudflare 处理,搬过来以后全部失败。改成全部在本机处理,境内后端必须完全自包含。

要注意,境内服务器对外提供服务要先有 ICP 备案,接入商会识别并阻断未备案域名的访问。备案怎么做见 App 备案流程,服务器怎么选见 App 备案需要服务器吗。

三条出路怎么选

  • 留在 Cloudflare:内容站、博客、展示页。绑自己的域名,接受高峰期的波动。
  • 加香港中转:后端深度绑定 Cloudflare 的数据库和存储,不想改代码、不想备案。做法见 香港服务器反向代理加速。
  • 搬到境内服务器:面向国内用户的高频接口,愿意备案。提升最明显。

三种方式可以按接口混着用,完整的决策思路见 网站国内访问慢怎么解决。企业客户也可以直接问 Cloudflare 的 China Network,但它要企业版订阅加 ICP 备案,个人开发者基本用不上。

Vercel 国内访问慢:思路相同

Vercel 的官方知识库对中国大陆访问的说明,思路和上面一样:

  • Vercel 在中国大陆没有服务器和 CDN 节点,请求由附近地区的节点响应,延迟会增加。
  • vercel.app 子域名可能被限速或无法访问;换成自己的域名,被影响的可能性小一些,但不能完全避免。
  • 建议自己托管字体、统计脚本这类在国内可能访问不了的第三方资源。
  • 对国内访问要求高的,可以在路由更好的基础设施上部署一个静态镜像,或者在中国大陆另做一套部署(需要 ICP 备案)。

有一点和 Cloudflare 不同:Vercel 官方不建议在它的部署前面加代理,所以香港中转那条路,对 Vercel 并不是官方认可的做法。Vercel 也写明无法保证在中国大陆的可用性和速度。