原同学
文章33
标签13
分类9

一言

如何使用阿里云ESA加速个人站的境内访问

如何使用阿里云ESA加速个人站的境内访问

本站迁移到Cloudflare CDN+Vercel Pages的架构已经几年了,但这些年间一直有一些访客来信反映境内访问非常卡顿,甚至直接“连接被重置”,直言“你一个中国网站怎么中国大陆都上不去”。
我也很清楚这是由于Cloudflare免费版计划并未对境内来源的访问请求优化,分配到的节点基本上是美国洛杉矶(LAX),从而由于众所周知的国际联网不稳定导致访问体验差。但在较长的一段时间以来,境内CDN服务价格高、抗攻击弱、计费项繁杂。本人甚至被臭小子刷流量刷掉了几十元,导致云服务商帐号欠费停服。最终撤下了境内CDN,转向以抗攻击著称的Cloudflare。

那有人就会问了:你不是说Cloudflare好吗?为什么今天来推荐的却是阿里云的CDN?
那我就要说了:此ESA不是传统的CDN,而是产品定位更接近Cloudflare的全新CDN产品(衍生自阿里云原先的DCDN全站加速产品线)。不仅如此,对于个人站点来说,它有着Cloudflare免费版计划无可比拟的优势:境内节点!
虽然免费计划不限流量,但是没有SLA保证,高峰或者高用量被QoS的风险还是有的(逃

咳咳,跑题了,本文的重点不是发广告,是教你如何快速使用阿里云ESA免费版为你的个人网站的境内访问提速!每一步都带图的那种!

由于本文截图全部为真实界面截图,故部分区域的敏感信息均使用色块遮挡覆盖,敬请谅解。

开始之前

让我们罗列一下所需要准备的资源:

  • 已实名认证的阿里云帐号
  • 拥有解析权的域名(本文以zestance.cn为例)
  • (若需要Hexo博客的自动构建)GitHub帐号
  • (若需要Hexo博客的自动构建)Cloudflare帐号
由于相关法律法规,上面所提到的拥有解析权的域名必须在工信部ICP备案通过,否则无法接入阿里云ESA境内区域。

STEP I: 总体规划

本文将把博客网站部署在www.zestance.cn域名下,利用DNS分区解析实现境内走阿里云ESA加速、境外直连源站。
部署采用以下架构:

  • DNS服务商:阿里云DNS云解析
  • 境内
    • DNS分区解析:阿里云ESA
    • CDN回源:Cloudflare Pages
  • 境外
    • DNS分区解析:Cloudflare Pages
    • 直连源站:Cloudflare Pages

STEP II: 配置源站

若您已经有稳定运行的源站,可跳过本节。

本文以Hexo框架的个人博客为例。假设源站已经架设完毕,可以正常hexo g构建(本文中使用yarn包管理器,使用其他包管理器的读者可自行替换yarn为对应命令)。
我们将使用Cloudflare Pages作为源站,关联到GitHub存储库进行自动CI构建。

1. 建立Cloudflare Pages源站

首先,在GitHub建立新的存储库(本文中以rinscr3003/zestance-io为例),将Hexo博客构建所需的文件全部上传到此存储库。由于后面我们将关联GitHub账户身份,因此此存储库可以是私有的。

建立GitHub存储库存放Hexo博客文件

然后登录Cloudflare帐户主页,点击左侧的“构建-Compute”,并点击其下的“Workers 和 Pages”菜单。

进入 Workers 和 Pages 菜单

并点击“创建应用程序”按钮:

在Pages页面新建应用程序

Cloudflare默认推荐创建的是Workers,但我们的源站为Hexo静态博客,故使用Pages即可。

创建Pages

选择导入现有Git存储库。

导入现有Git存储库

由于我已经在使用Cloudflare Pages,此处显示的是我的个人帐户。若是第一次将GitHub帐户关联到Cloudflare,可点击添加帐户并按流程进行。

关联GitHub帐户

若GitHub帐户下有多个组织,会在该界面提示选择,我们选择存储库所在的帐户/组织(本文中是rinscr3003)。根据帐户的安全性设置不同,可能会被要求进行验证。

选择要关联的GitHub组织

由于我的个人GitHub帐户已经关联过,本着逐步教学的原则,我找了一个未关联的组织作为例子演示截图。点击图中的“Install & Authorize”即可。

在GitHub授权关联

当我们完成GitHub帐户关联后,回到刚刚的部署页面,选择Hexo博客所在的存储库。

选择Pages使用的存储库

下一步,我们进入到了“设置构建和部署”页面,在此如图配置即可。若您使用的不是yarn包管理器,可按您实际使用的包管理器替换命令,如npm run build

配置Pages的构建设置

单击“保存并部署”按钮,Cloudflare会从GitHub拉取存储库,并进行Hexo构建。构建成功后,我们滚动到页面底部,点击“继续处理项目”。

Pages构建完成页面

随后将进入如图所示界面,我们可以点击此处的生产环境部署链接访问测试。由于pages.dev域名在中国大陆连通性较差,可能无法访问成功。只要构建没有出错,一般都可以正常产生页面。

Pages构建完成页面

撰于2026年3月20日:关于Yarn4的问题
由于Cloudflare Pages默认采用Yarn4进行构建,但许多其他类似的Pages服务尚未支持Yarn4。考虑到可迁移性,本文在“设置构建和部署”步骤中暂时采用如下环境变量设置指定版本,以继续使用Yarn1.x进行构建。
指定使用Yarn1.x

2. 配置自定义域指向源站

由于刚刚所说的情况,我们不能直接使用pages.dev域名。且我们也希望使用阿里云ESA进行境内加速,故我们需要将自己的域名(本文中为www.zestance.cn)指向源站。

点击“设置自定义域”按钮,并按如下流程操作:

Pages配置自定义域-1
Pages配置自定义域-2
Pages配置自定义域-3

此时,Cloudflare Pages会提示添加CNAME记录,将域名指向pages.dev域名(请以实际页面提示为准)。
由于Cloudflare会测试域名的解析情况以判断自定义域名的有效性,但我们采用了分区解析架构,因此需要将默认解析指向Cloudflare Pages源站。

登录阿里云控制台,转到云解析-公网权威解析页面,进入我们自己的域名的解析设置页面:

进入自有域名解析设置页面

此处,添加一条默认线路的解析,指向Cloudflare的Pages域名。此处注意解析请求来源必须是“默认”。

自有域名解析到Pages-1
自有域名解析到Pages-2

添加解析后数分钟(因为要等DNS记录同步),回到Cloudflare Pages自定义域配置页面,点击“检查DNS记录”,不出意外即可从停用状态变为活动状态。

Pages配置自定义域-4
Pages配置自定义域-5

此时再访问www.zestance.cn即可看到我们的博客,但此时由于是直连境外源站,也有可能受到国际联网波动影响而不成功。

通过自定义域名直连Pages源站
坏了,黑历史被发现了
为了给你们写教程把这个陈年老站翻出来也是拼了

STEP III: 阿里云,启动!

有的读者已经按捺不住了:你写了这么多,阿里云ESA在哪呢?快点端上来罢!
哎,莫急,这就端上来!

1. 在ESA中添加站点

登录阿里云控制台,转到ESA-站点管理页面,进入我们自己的域名的解析设置页面,点击新增站点,并按如下流程进行站点添加。

ESA添加站点-1
ESA添加站点-2

选择“中国内地”加速区域(因为境外直连Pages的速度尚可),“CNAME”接入方式。这里还有一种“NS”接入方式是将域名全权托管给ESA,类似Cloudflare的方式。

ESA添加站点-3

这里我们直接选择不限流量的免费版。若后期对其他高级特性有需求,可升级到6.6/月的基础版,一般可个人站长的基本需求(50G基本流量,可另购流量包)。

ESA添加站点-4

点击完成后,我们需要去验证域名的归属权。按照页面提示,添加指定的TXT记录。

ESA添加站点-5
ESA添加站点-6

数分钟后回到ESA页面(因为要等DNS记录同步),点击“点击验证”按钮,即可看到站点状态变为已启用。

ESA添加站点-7

2. 在ESA中添加加速域名

在ESA站点页面上,点击左侧的“DNS”,并点击其下的“记录”菜单。

ESA添加域名-1

点击“添加记录”。

ESA添加域名-2

如图设置,将源站目标指向Cloudflare的Pages域名(和之前设置的DNS解析CNAME目标一样)。

ESA添加域名-3

选择网站页面即可。

ESA添加域名-4

为了使ESA加速生效,我们需要再设置一条DNS解析记录。指向阿里云ESA提供的CNAME域名。此处注意解析请求来源必须是“地域/中国地区”,其他注意事项与配置Cloudflare的CNAME记录时一样。

ESA添加域名-5
ESA添加域名-5

添加解析后数分钟(因为要等DNS记录同步),回到阿里云ESA的DNS记录添加页面,点击“我已完成CNAME配置”,即可启用ESA加速。

3. 在ESA中为域名启用HTTPS

在ESA站点页面上,点击左侧的“SSL/TLS”,并点击其下的“边缘证书”菜单。

ESA添加证书-1

点击“申请免费证书”。

ESA添加证书-2

如图设置即可。点击确定,系统将自动尝试申请证书,约10分钟即可得到结果。

ESA添加证书-3

如果证书不能自动申请成功
由于我们采用了境内外DNS分流的策略,而许多证书签发机构(CA)均位于境外。当阿里云ESA尝试使用HTTP方式验证时,由于我们所设置的DNS分区解析,境外访问时会被解析到Cloudflare Pages,因此CA的访问请求实际上被发送到了Cloudflare Pages(而不是预期的阿里云ESA),进而导致证书自动申请失败。
指定使用Yarn1.x
此时,我们需要手动添加DCV托管(通过CNAME记录实现)来将此站点的证书签发权托管给阿里云ESA。
或者如果你能记得三个月上来换一次证书,那手动上传也不是不行

若提示HTTP质询失败,我们也可以采用DCV托管方式授权阿里云ESA完成验证。根据阿里云页面提示,我们需要添加一条CNAME记录。由于免费套餐仅支持Let’s Encrypt证书,我们只需添加一条记录即可。

ESA添加证书-4

这个提示写的比较迷惑人,因此给读者一个例子参考。灰色色块遮挡的是站点ID,请以自己页面提示的实际内容为准。也可参考阿里云官方文档中的相关内容

ESA添加证书-5

DCV添加完成后,我们重新回到本节开头的第一步操作,申请新的证书,即可成功。

ESA添加证书-6

STEP IV: Enjoy it

此时,我们可以使用nslookup工具测试境内DNS解析是否正确:

检查境内DNS解析

如图所示,是我们配置的“地域/中国地区”所对应的阿里云ESA的CNAME域名,说明分区解析已经正常工作。

让我们访问一下站点测试吧!

使用ESA加速

直连Cloudflare Pages源站

可以看到,图片等相对较大的资源在经过ESA加速后(前提是缓存命中),访问速度明显加快。同时,由于中国大陆地区的DNS解析目标全部落在境内,用户到网站的连接可靠性也得到了进一步提升。

阿里云拨测HTTP结果

但值得注意的是,首包时间非常长,这可能是ESA跨境到Cloudflare Pages回源造成的。若有条件在中国大陆地区设置源站(如阿里云祖传的OSS回源),还可以进一步优化境内用户访问体验。

本文作者:原同学
本文链接:https://blog.mzy7.cn/posts/f8d58ca8.html
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可,但如果本文显式指定了其他许可协议,则以指定的许可协议为准。