一、💡 一句话理解
核心结论
CDN(Content Delivery Network,内容分发网络)会把网站资源缓存到多个地区的边缘节点,让用户优先从距离自己更近的节点获取内容,而不是每次都直接访问源站服务器。
域名和 DNS 负责“找到入口”,CDN 负责“就近发内容”。域名绑定方法见:5.域名绑定。
二、📡 理论:CDN 的组成与工作方式
2.1 CDN 的核心组成
可以把 CDN 理解为分布在各地的“网站分店”:
| 组成 | 白话理解 | 实际作用 |
|---|---|---|
| 源站(Origin) | 总店 | 保存最原始、最完整的网站文件 |
| CDN 节点(Edge Node) | 各地分店 | 就近向用户提供缓存内容 |
| 缓存(Cache) | 分店库存 | 暂存 HTML、CSS、JS、图片等资源 |
| 加速域名 | 用户访问的门牌 | 通常通过 CNAME 指向 CDN |
CDN 不要求源站和 CDN 是同一家云厂商。当前博客可以使用阿里云 ECS 作为源站,再选择其他 CDN 服务商;关键是 CDN 能访问 ECS 源站,并满足备案和节点覆盖要求。
对于当前 Quartz 博客:
Quartz 构建生成的 public 目录
↓
上传到阿里云 ECS
↓
作为 CDN 源站
↓
CDN 节点缓存静态网页资源
↓
用户从附近节点访问2.2 CDN 是怎么工作的
CDN 主要有两种访问情况:
| 情况 | 访问过程 | 结果 |
|---|---|---|
| 缓存命中 | 用户 → 附近 CDN 节点 → 返回资源 | 速度快,不需要访问源站 |
| 缓存未命中 | 用户 → CDN 节点 → 源站 → CDN 节点 → 用户 | CDN 获取资源后缓存,首次访问可能较慢 |
完整流程可以简化为:
用户访问 blog.example.com
↓
DNS 将域名指向 CDN CNAME
↓
CDN 按用户位置选择合适节点
↓
节点检查本地是否有缓存
┌───────────────┴───────────────┐
↓ ↓
缓存命中 缓存未命中
↓ ↓
直接返回资源 回源 ECS 获取并缓存对于 Quartz 这类静态博客,HTML、CSS、JS 和图片都适合被 CDN 缓存。但 HTML 缓存时间不宜设置过长,否则发布新文章后,用户可能暂时看到旧页面。
三、⚙️ 理论:CDN 能解决什么问题
3.1 CDN 能改善的地方
- 缩短访问距离:用户从附近节点获取资源,减少长距离传输。
- 减少跨运营商影响:用户不必每次都直接连接源站所在的网络。
- 减轻源站压力:大量重复访问由 CDN 节点承担。
- 改善静态资源加载:图片、CSS、JS 和静态 HTML 适合被缓存。
- 提高突发访问的承载能力:热点页面被缓存后,源站不需要重复处理相同请求。
3.2 CDN 不能解决什么问题
CDN 不是万能加速器
CDN 只能优化“用户到 CDN 节点”和“缓存资源分发”这两段链路,不能自动消除 VPN 绕路、源站故障、动态接口慢或公司网络策略造成的问题。
- 如果 VPN 出口距离 CDN 节点仍然很远,访问速度仍可能不理想。
- 如果资源经常未命中缓存,仍然会回源到国内 ECS。
- 动态接口、登录请求和实时数据通常不能像静态文件一样长期缓存。
- 域名本身不会提速,必须将域名接入 CDN,并正确配置缓存和源站。
四、🚀 实践:为 Quartz 接入 CDN
4.1 方案一:全球 CDN 加速 + 国内 ECS 源站
这是成本和复杂度较低的方案:
国内用户 ─────→ 国内 CDN 节点 ┐
├→ CDN → 阿里云 ECS 源站
VPN / 海外用户 → 海外 CDN 节点 ┘阿里云 CDN 的“全球”加速会将用户调度到较近的 CDN 节点。海外缓存命中后,用户不需要每次都直接访问中国内地 ECS。
但如果海外节点缓存失效,仍然需要跨境回源到中国内地源站,第一次访问或刚发布内容时可能仍然较慢。阿里云海外加速说明
4.2 方案二:国内源站 + 香港或海外镜像源站
如果公司网络要求所有访问都经过 VPN,推荐将 VPN 用户视为海外用户处理:
国内用户
↓
国内 CDN 节点
↓
国内 ECS 源站
公司 VPN 用户 / 海外用户
↓
海外 CDN 节点
↓
香港或海外镜像源站可以分两个阶段实施:
- 低成本阶段:只保留国内 ECS,在 CDN 中选择“全球”加速。
- 稳定阶段:将 Quartz 构建后的
public目录同步到香港或海外服务器,再通过 CDN 的地域规则将国内用户指向国内源站,将非中国内地用户指向海外源站。
阿里云 CDN 支持按用户地域配置不同源站,也支持配置多个源站并设置主备优先级或权重。阿里云条件源站、阿里云多源站配置
4.3 阿里云 CDN 全球加速的配置步骤
- 确认域名已经完成 ICP 备案。阿里云 CDN 的“中国内地”或“全球”加速区域都要求加速域名有 ICP 备案号。阿里云 CDN 备案要求
- 在阿里云 CDN 中添加
www.example.com或blog.example.com作为加速域名。 - 将源站设置为阿里云 ECS 的公网 IP 或源站域名。
- 加速区域选择“全球”,业务类型选择适合静态网站的类型。
- 将域名 DNS 解析从 A 记录改为 CDN 分配的 CNAME。阿里云 CDN 配置说明
- 为 HTML 设置较短缓存时间;CSS、JS 和图片可以设置较长缓存时间。
- Quartz 重新部署后,及时刷新或清理 CDN 缓存。
不要误选“全球(不包含中国内地)”
这个区域虽然不要求 ICP 备案,但中国内地用户会被调度到香港、日本、新加坡等境外节点,不适合同时追求国内和海外访问速度。阿里云加速区域说明
如果 VPN 是全局代理且公司网络不允许分流,就不能把“国内直连”作为前提。VPN 开启时,CDN 通常会按照 VPN 出口位置进行节点调度,而不是按照你真实所在位置调度。
五、🔍 最小例子:为 Quartz 配置 CDN
假设:
访问域名:www.example.com
CDN 源站:阿里云 ECS 公网 IP
网站目录:/www/AfykeBlog/afyke-blog5.1 CDN 控制台配置
在 CDN 控制台添加:
| 配置项 | 示例值 |
|---|---|
| 加速域名 | www.example.com |
| 加速区域 | 全球 |
| 源站地址 | 阿里云 ECS 公网 IP |
| 业务类型 | 静态网站或图片小文件 |
5.2 DNS 配置
CDN 创建成功后会分配一个 CNAME,例如:
www.example.com → example.cdn-provider.com将域名 DNS 从原来的 A 记录改为 CNAME:
| 主机记录 | 记录类型 | 记录值 |
|---|---|---|
| www | CNAME | CDN 分配的 CNAME |
5.3 发布后的缓存处理
修改 Markdown 笔记
↓
Quartz build
↓
生成新的 public
↓
部署到 ECS 或海外镜像源站
↓
刷新 CDN 缓存建议 HTML 使用较短缓存时间,CSS、JS 和图片使用较长缓存时间。若发布后页面没有更新,优先检查 CDN 缓存,而不是马上修改 DNS。
六、⚠️ 边界、费用与常见误区
6.1 CDN 不一定要和 ECS 使用同一家云厂商
阿里云 ECS 可以作为源站,CDN 可以选择其他服务商。选择时重点比较:
- 是否有中国内地和海外节点。
- 是否支持中国内地加速及 ICP 合规要求。
- 是否支持按地域选择源站。
- 海外回源线路是否稳定。
- 流量、请求数和 HTTPS 是否分别计费。
6.2 CDN 为什么会收费
CDN 使用了各地边缘节点、网络带宽和缓存服务,通常会按下行流量、请求数或其他增值功能计费。阿里云 CDN 当前静态 HTTPS 请求每月前 500 万次免费,但下行流量仍需以实际计费规则为准。阿里云 CDN 计费说明
个人博客访问量不大时,可以先不接 CDN,或先使用按量计费并设置流量告警;不要一开始就购买大额资源包。
6.3 CDN 常见误区
- DNS 指向 CDN,不等于源站已经配置正确;CDN 仍然需要能够访问源站。
- CDN 缓存命中后速度快,但缓存未命中仍然要回源。
- CDN 不会自动修复 VPN 的绕路问题。
- 使用第三方 CDN 不能绕过中国内地服务器的 ICP 备案要求。阿里云备案核查说明
七、📌 总结
CDN 的核心链路是:
用户
↓ 访问加速域名
CDN 边缘节点
↓ 缓存未命中时回源
源站 ECS 或海外镜像对于当前 Quartz 博客:
- 先确认域名和源站可以正常访问。
- 访问量不大时,不必为了“看起来专业”强行使用 CDN。
- 如果 VPN 导致海外访问慢,先使用全球 CDN + 国内源站。
- 如果缓存命中后仍不稳定,再增加香港或海外镜像源站。
- 国内源站和海外源站通过 CDN 的地域规则分流。
一句话总结
域名负责找到入口,DNS 负责指路,CDN 负责就近发内容,源站负责保存和提供原始网页。