阿里云 ESA 博客部署
我昨天把这个博客搬上了阿里云 ESA。
我本来想用 Cloudflare Pages。可读者主要在国内,Cloudflare 免费版在内地没有节点,企业版的中国网络也不带 Pages。
用下来,ESA 是国内最像 Cloudflare 的一个。免费版放个人博客够用,国内打开也快,推送后约 40 秒上线,证书自动续,到现在没花钱。最大的门槛是要备案,不过个人博客备案基本都能过,问题不大。
两边的免费版差在这几处
ESA 是阿里云的边缘安全加速,对标 Cloudflare,里面的「函数和 Pages」对应 Pages 和 Workers。下表是我对着两边 2026 年 10 月的官方文档整理的。
| ESA 免费版 | Cloudflare 免费版 | |
|---|---|---|
| 中国内地节点 | 有,要求 ICP 备案 | 没有 |
| 公开的默认域名 | 没有,测试域名要 token 才能访问 | <项目>.pages.dev |
| 分支预览 | 非生产分支只构建,不部署 | 每个分支、每次提交都有预览地址 |
| Git 平台 | GitHub | GitHub、GitLab |
| 构建次数 | 没公布 | 每月 500 次 |
| 单项目文件数 | 2,000 | 20,000 |
| 函数免费请求 | 每账号每天 10 万次 | 每账号每天 10 万次 |
| 函数单次 CPU 时间 | 没公布 | 10 ms |
| KV | 没有免费额度,按量付费 | 每天读 10 万次、写 1,000 次 |
| 对象存储、数据库 | 没有,对象存储要另开 OSS | R2 存储 10 GB,D1 存储 5 GB |
| 免费证书 | Let’s Encrypt,到期前 30 天自动续签 | Universal SSL,自动续签 |
| 接入方式 | NS、CNAME 都免费 | NS;Pages 的子域名可以从外部 CNAME 过来 |
| 免费站点数 | 每账号 1 个 | 文档没写上限 |
表中数据来自 ESA 的套餐对比、函数和 Pages、函数和 Pages 计费、免费版、使用限制、增值服务费;Cloudflare 的 Pages 限制、Workers 定价、Workers 限制、KV 定价、R2 定价、D1 定价、部分接入。均于 2026-10-03 读取。
最该看的是第一行。ESA 的加速区域有三个选项,选中国内地或全球都要求 ICP 备案。选全球(不包含中国内地)不用备案,但 ESA 不会用内地节点服务这个站,国内读者照样走境外,跟用 Cloudflare 没有区别。
文档里还有两条限制容易漏看。免费版的官方定位是「仅供个人、企业的非核心业务测试使用,不支持大流量业务」,带宽和请求速率有限制,具体数字没给。另一条对所有套餐都适用,遭受攻击,或者流量突增又没提前报备,域名会被切进沙箱,可用节点大幅减少,要恢复得买企业版。想要能预期的上限,最低一档付费的基础版是 9.9 元一个月,含 50 GB 流量。
搭起来是五步
-
准备一个已备案的域名。刚备案成功的,文档建议过 8 小时再添加站点。
-
在 ESA 控制台领免费版,添加站点,加速区域选中国内地或全球。接入方式有 NS 和 CNAME 两种,想让不带 www 的根域名也打开博客,就选 NS,因为根域名上有邮箱的 MX 记录时不能再加 CNAME。从别家 DNS 迁过来的,先把旧记录导进 ESA 逐条核对,邮箱的 MX 和 TXT 尤其要对上,再去注册商改 NS。
-
在仓库根目录放一个
esa.jsonc,告诉 ESA 怎么构建。下面是 Astro 博客用的配置。{ "name": "agentd-blog", "installCommand": "npm install", "buildCommand": "npm run build", "assets": { "directory": "./dist", "notFoundStrategy": "404Page" } }Node 版本写在
package.json的engines.node,只写主版本号,比如"22"。 -
在控制台的函数和 Pages 里导入 GitHub 仓库。私有仓库要搜名字才会出现。高级配置里的「静态资源目录」默认是空的,要填
./dist。 -
把域名绑定到这个项目,申请免费证书,再加一条强制 HTTPS 的规则。
做完这些,以后每次推送到 main,ESA 都会自动构建发布。
可能卡住的三个地方
根域名可能绑不上。我按文档的域名绑定方式把根域名绑到项目时,接口一直返回 DependedByOthers,错误信息只让稍后重试,原因我没查清。后来的绕法是在根域名建一条开代理的 A 记录,源站随便填一个占位地址,请求交给 Pages 处理,不会回源。再用路由功能把这个主机名交给项目,同时关掉异常回源。免费版有 5 条路由额度。
Pages 绑定的域名,在记录列表接口 ListRecords 里查不到,ESA 把它存成了一条特殊记录。找不到它的时候,别再加一条同名记录。
没有能分享的预览地址。项目自带的测试域名从 2026 年 4 月起要 token 才能访问,非生产分支也只构建不部署。想让别人看草稿,得自己再建一个项目,绑一个子域名。
这篇文章也是这么发出来的,写完推送到 main,约 40 秒后就能在 agentd.cn 打开。