如何使用阿里云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帐号
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账户身份,因此此存储库可以是私有的。
然后登录Cloudflare帐户主页,点击左侧的“构建-Compute”,并点击其下的“Workers 和 Pages”菜单。
并点击“创建应用程序”按钮:
Cloudflare默认推荐创建的是Workers,但我们的源站为Hexo静态博客,故使用Pages即可。
选择导入现有Git存储库。
由于我已经在使用Cloudflare Pages,此处显示的是我的个人帐户。若是第一次将GitHub帐户关联到Cloudflare,可点击添加帐户并按流程进行。
若GitHub帐户下有多个组织,会在该界面提示选择,我们选择存储库所在的帐户/组织(本文中是rinscr3003)。根据帐户的安全性设置不同,可能会被要求进行验证。
由于我的个人GitHub帐户已经关联过,本着逐步教学的原则,我找了一个未关联的组织作为例子演示截图。点击图中的“Install & Authorize”即可。
当我们完成GitHub帐户关联后,回到刚刚的部署页面,选择Hexo博客所在的存储库。
下一步,我们进入到了“设置构建和部署”页面,在此如图配置即可。若您使用的不是yarn包管理器,可按您实际使用的包管理器替换命令,如npm run build。
单击“保存并部署”按钮,Cloudflare会从GitHub拉取存储库,并进行Hexo构建。构建成功后,我们滚动到页面底部,点击“继续处理项目”。
随后将进入如图所示界面,我们可以点击此处的生产环境部署链接访问测试。由于pages.dev域名在中国大陆连通性较差,可能无法访问成功。只要构建没有出错,一般都可以正常产生页面。
2. 配置自定义域指向源站
由于刚刚所说的情况,我们不能直接使用pages.dev域名。且我们也希望使用阿里云ESA进行境内加速,故我们需要将自己的域名(本文中为www.zestance.cn)指向源站。
点击“设置自定义域”按钮,并按如下流程操作:


此时,Cloudflare Pages会提示添加CNAME记录,将域名指向pages.dev域名(请以实际页面提示为准)。
由于Cloudflare会测试域名的解析情况以判断自定义域名的有效性,但我们采用了分区解析架构,因此需要将默认解析指向Cloudflare Pages源站。
登录阿里云控制台,转到云解析-公网权威解析页面,进入我们自己的域名的解析设置页面:
此处,添加一条默认线路的解析,指向Cloudflare的Pages域名。此处注意解析请求来源必须是“默认”。

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

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

坏了,黑历史被发现了为了给你们写教程把这个陈年老站翻出来也是拼了
STEP III: 阿里云,启动!
有的读者已经按捺不住了:你写了这么多,阿里云ESA在哪呢?快点端上来罢!
哎,莫急,这就端上来!
1. 在ESA中添加站点
登录阿里云控制台,转到ESA-站点管理页面,进入我们自己的域名的解析设置页面,点击新增站点,并按如下流程进行站点添加。

选择“中国内地”加速区域(因为境外直连Pages的速度尚可),“CNAME”接入方式。这里还有一种“NS”接入方式是将域名全权托管给ESA,类似Cloudflare的方式。
这里我们直接选择不限流量的免费版。若后期对其他高级特性有需求,可升级到6.6/月的基础版,一般可个人站长的基本需求(50G基本流量,可另购流量包)。
点击完成后,我们需要去验证域名的归属权。按照页面提示,添加指定的TXT记录。

数分钟后回到ESA页面(因为要等DNS记录同步),点击“点击验证”按钮,即可看到站点状态变为已启用。
2. 在ESA中添加加速域名
在ESA站点页面上,点击左侧的“DNS”,并点击其下的“记录”菜单。
点击“添加记录”。
如图设置,将源站目标指向Cloudflare的Pages域名(和之前设置的DNS解析CNAME目标一样)。
选择网站页面即可。
为了使ESA加速生效,我们需要再设置一条DNS解析记录。指向阿里云ESA提供的CNAME域名。此处注意解析请求来源必须是“地域/中国地区”,其他注意事项与配置Cloudflare的CNAME记录时一样。

添加解析后数分钟(因为要等DNS记录同步),回到阿里云ESA的DNS记录添加页面,点击“我已完成CNAME配置”,即可启用ESA加速。
3. 在ESA中为域名启用HTTPS
在ESA站点页面上,点击左侧的“SSL/TLS”,并点击其下的“边缘证书”菜单。
点击“申请免费证书”。
如图设置即可。点击确定,系统将自动尝试申请证书,约10分钟即可得到结果。
若提示HTTP质询失败,我们也可以采用DCV托管方式授权阿里云ESA完成验证。根据阿里云页面提示,我们需要添加一条CNAME记录。由于免费套餐仅支持Let’s Encrypt证书,我们只需添加一条记录即可。
这个提示写的比较迷惑人,因此给读者一个例子参考。灰色色块遮挡的是站点ID,请以自己页面提示的实际内容为准。也可参考阿里云官方文档中的相关内容。
DCV添加完成后,我们重新回到本节开头的第一步操作,申请新的证书,即可成功。
STEP IV: Enjoy it
此时,我们可以使用nslookup工具测试境内DNS解析是否正确:
如图所示,是我们配置的“地域/中国地区”所对应的阿里云ESA的CNAME域名,说明分区解析已经正常工作。
让我们访问一下站点测试吧!
可以看到,图片等相对较大的资源在经过ESA加速后(前提是缓存命中),访问速度明显加快。同时,由于中国大陆地区的DNS解析目标全部落在境内,用户到网站的连接可靠性也得到了进一步提升。
但值得注意的是,首包时间非常长,这可能是ESA跨境到Cloudflare Pages回源造成的。若有条件在中国大陆地区设置源站(如阿里云祖传的OSS回源),还可以进一步优化境内用户访问体验。

