阿里云 CDN:加速、SSL 与边缘计算完全指南
内容分发网络(CDN)已经远远超越了简单的静态资源缓存。
- CDN 架构与基本原理
- 配置 CDN 加速
- SSL 证书管理与 HTTPS 优化
- 使用 EdgeRoutine 进行边缘计算
- 性能监控与优化
- 多区域与全球加速策略
- 成本优化
内容分发网络(CDN)已经远远超越了简单的静态资源缓存。阿里云 CDN 是一个全球分布的边缘平台,能够加速内容分发、通过集成的 SSL/TLS 保护应用安全,并通过 EdgeRoutine 实现无服务器边缘计算。阿里云 CDN 在 70 多个国家和地区拥有超过 2,800 个边缘节点,是全球最严苛的 Web 应用的前门入口。
本指南提供阿里云 CDN 的全面技术实践——从基础加速配置到高级 SSL 优化、证书生命周期管理以及边缘计算部署。
CDN 架构与基本原理
阿里云 CDN 采用分层缓存架构运行:
用户 → DNS(解析到最近的边缘节点)→ 边缘节点(L1 缓存)→
→ (缓存未命中时)区域节点(L2 缓存)→
→ (缓存未命中时)源站服务器
边缘节点(L1 缓存): 用户请求的第一接触点。边缘节点部署在靠近最终用户的互联网交换点(IXP)和数据中心,最大限度地降低延迟。如果请求的内容在边缘节点已缓存(缓存命中),则直接返回。主要大都市区域的典型 L1 缓存延迟:1-10 毫秒。
区域节点(L2 缓存): 如果边缘节点没有缓存该内容(缓存未命中),则会向上级区域节点查询。L2 节点汇聚来自多个边缘节点的请求,提高冷门内容的缓存命中率。这减少了到达源站服务器的请求数量。
源站服务器: 内容的真实来源——通常是 OSS 存储空间、ECS 实例、SLB 端点或第三方服务器。只有 L1 和 L2 层都缓存未命中时才会访问源站。
CDN 核心概念
缓存命中率: 从缓存中直接返回、无需回源的请求所占百分比。更高的缓存命中率意味着更低的源站负载、更低的用户延迟和更低的成本。静态内容目标 > 90%,动态内容目标 > 70%。
生存时间(TTL): 内容在 CDN 检查源站是否有更新版本之前保持缓存的时间。TTL 由以下因素决定:
- CDN 缓存规则(最高优先级)
- 源站返回的
Cache-Control: max-ageHTTP 头部 - 源站返回的
ExpiresHTTP 头部 - CDN 默认 TTL(可在控制台中配置)
回源: CDN 向源站服务器请求内容的过程。应尽量减少回源流量,以降低源站成本并提升面向用户的性能。
配置 CDN 加速
域名添加与 CNAME 配置
步骤一:将域名添加到 CDN
在阿里云 CDN 控制台中,添加加速域名(用户将访问的域名,例如 cdn.example.com)。配置:
- 源站类型: OSS 域名、ECS/SLB IP 地址或自定义源站域名
- 源站端口: HTTP 使用 80,HTTPS 使用 443
- 回源协议: 回源请求使用 HTTP、HTTPS 还是跟随客户端协议
步骤二:DNS 配置
添加域名后,CDN 会分配一个 CNAME(例如 example.com.alikunlun.com)。更新您的 DNS 记录:
- 创建 CNAME 记录,将您的子域名指向 CDN 的 CNAME
- 切勿使用 A 记录——CDN 节点 IP 会随着阿里云添加和重新平衡边缘容量而动态变化
步骤三:验证域名所有权
阿里云要求进行域名所有权验证。在您的 DNS 配置中添加提供的 TXT 验证记录。请注意,DNS 传播可能需要 5-30 分钟,具体取决于 DNS 提供商的 TTL 设置。
缓存规则配置
缓存规则定义了 CDN 如何基于文件扩展名、目录路径或完整 URL 模式来缓存内容。在 CDN 控制台的"缓存配置"下配置规则:
静态资源(长 TTL):
| 文件类型 | 推荐 TTL | 原理 |
|---|---|---|
| 图片(.jpg, .png, .gif, .webp, .svg) | 30 天 | 图片很少变更;使用内容哈希文件名实现更新 |
| CSS, JavaScript | 7-30 天 | 通过文件名中的内容哈希进行版本化 |
| 字体(.woff, .woff2, .ttf) | 365 天 | 字体极少变更 |
| 视频/音频(.mp4, .mp3) | 30 天 | 大文件;尽量减少回源 |
动态/API 内容(短 TTL 或不缓存):
| 内容类型 | 推荐 TTL | 原理 |
|---|---|---|
| HTML 页面 | 1 小时 | 可能包含动态元素;短暂缓存 |
| JSON API | 0 秒(不缓存) | API 响应通常是实时的 |
| 用户专属页面 | 0 秒(不缓存) | 个性化内容不得在用户之间共享 |
缓存规则优先级: 规则按顺序评估——第一个匹配的规则生效。将规则从最具体到最不具体进行组织,以确保正确的行为。
源站盾(Origin Shield)
源站盾是位于边缘节点和源站服务器之间的额外缓存层。它汇聚来自所有边缘节点的请求,显著减少到达源站的请求数量:
- 有源站盾:边缘 → 源站盾(1 个请求)→ 源站
- 无源站盾:边缘 A → 源站,边缘 B → 源站,边缘 C → 源站(同一未缓存内容的多个并发请求)
为生产环境的 CDN 配置启用源站盾。额外一跳的成本与源站带宽和计算资源的节省相比微不足道。
SSL 证书管理与 HTTPS 优化
HTTPS 已不再是可选项——它是 Web 安全、SEO 排名(Google 将 HTTPS 作为排名信号)和浏览器兼容性(现代浏览器将 HTTP 站点标记为"不安全")的基线要求。阿里云 CDN 提供全面的 SSL/TLS 证书管理和优化功能。
证书来源
阿里云 SSL 证书服务: 通过阿里云购买证书或上传第三方证书。SSL 证书服务直接与 CDN 集成,允许您在为 CDN 域名配置 HTTPS 时从下拉列表中选择证书。
支持的证书类型:
- 域名验证(DV):签发最快,适用于大多数网站
- 组织验证(OV):验证组织身份,推荐用于商业网站
- 扩展验证(EV):最高保证级别,在浏览器地址栏显示组织名称
免费证书: 阿里云 CDN 为已添加到 CDN 的域提供由 DigiCert 或 GlobalSign 签发的免费 DV 证书。这些证书自动续期,消除了证书生命周期管理的开销。
上传自有证书: 上传 PEM 编码的证书和私钥。这是已有既有证书采购流程的组织最常见的方法。
HTTPS 配置
步骤一:启用 HTTPS
在 CDN 控制台中,为您的域名启用 HTTPS 并选择证书。配置:
- HTTPS 监听端口: 默认 443
- 强制 HTTPS 跳转: 将所有 HTTP(端口 80)请求重定向到 HTTPS。为所有生产域名启用此选项。
- HTTP/2: 默认启用。HTTP/2 提供多路复用、头部压缩和服务器推送,显著提升页面加载性能。
步骤二:配置 TLS 策略
选择最低 TLS 版本和加密套件:
- 最低 TLS 版本: 设置为 TLS 1.2。禁用存在已知漏洞的 TLS 1.0 和 1.1(POODLE、BEAST)。
- 加密套件偏好: 选择"服务端优先"——CDN 从客户端和服务器支持的加密套件交集中选择最强的加密套件。
- 推荐的加密套件(TLS 1.2/1.3):
- TLS 1.3:
TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 - TLS 1.2:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
步骤三:配置 OCSP 装订
在线证书状态协议(OCSP)装订减少了证书吊销检查的延迟和隐私问题。启用 OCSP 装订后,CDN 会定期从 CA 获取 OCSP 响应并将其包含(装订)在 TLS 握手过程中,免除了客户端直接联系 CA 的需要。
在 CDN HTTPS 配置中启用 OCSP 装订。通常默认启用。
HTTPS 性能优化
TLS 握手会增加延迟——TLS 1.2 通常需要 1-2 个往返,TLS 1.3 需要 1 个往返。优化这些开销:
会话恢复: TLS 会话恢复允许回访客户端跳过完整的握手过程,使用先前建立的会话。阿里云 CDN 支持两种机制:
- 会话 ID: CDN 缓存会话 ID 和参数,允许客户端重新连接时快速恢复。
- 会话票据: CDN 将会话参数加密为一个票据,客户端存储该票据并在重新连接时呈现。会话票据可跨 CDN 边缘节点工作,推荐用于 CDN 部署。
会话恢复默认启用。会话票据密钥在边缘节点之间自动轮换。
TLS 1.3: TLS 1.3 将握手减少到单次往返(1-RTT),并为回访客户端支持 0-RTT 恢复。它还会移除过时的加密原语。确保在 CDN 配置中启用 TLS 1.3,并且如果回源使用 HTTPS,源站也支持 TLS 1.3。
早期数据(0-RTT): TLS 1.3 0-RTT 允许客户端在恢复会话时,在握手的首次传输中发送应用数据。这对于间歇性连接的移动应用尤其有利。谨慎启用 0-RTT——它容易受到重放攻击,因此仅对幂等的 GET 请求启用。
使用 EdgeRoutine 进行边缘计算
EdgeRoutine 是阿里云的无服务器边缘计算平台,使您能够在 CDN 边缘节点上运行 JavaScript 代码。它将 CDN 从内容分发平台转变为可编程的边缘应用平台。
EdgeRoutine 架构
EdgeRoutine 在每个 CDN 边缘节点的轻量级隔离运行时中执行 JavaScript(兼容 ES6)。该运行时提供类似 Service Worker 的 API,让您可以访问:
- 传入的 HTTP 请求(URL、头部、方法、正文)
- 传出的 HTTP 响应(状态码、头部、正文)
- Fetch API,用于从边缘发起传出请求(到源站或第三方 API)
- Cache API,用于编程式缓存操作
- Streams API,用于高效处理大型请求/响应正文
EdgeRoutine 应用场景
动态内容个性化: 基于用户地理位置、设备类型或 Cookie 数据在边缘修改响应,无需回源。示例:通过在边缘改写 HTML,从单个缓存响应中提供区域特定的定价或语言变体。
addEventListener('fetch', (event) => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
// 从源站或缓存获取
let response = await fetch(request);
// 从 CDN 头部获取国家信息
const country = request.headers.get('X-Geo-Country') || 'US';
// 克隆并修改响应
let html = await response.text();
html = html.replace('{{COUNTRY}}', country);
return new Response(html, {
headers: response.headers
});
}
边缘 A/B 测试: 将一定比例的流量路由到不同的源站服务器,或基于随机 bucket 分配修改响应,无需应用级 A/B 测试框架。
Bot 缓解: 在请求到达源站之前,在边缘实现自定义 Bot 检测逻辑——CAPTCHA 验证、JavaScript 验证指纹——保护源站免受 Bot 流量的影响。
URL 改写与重定向: 在不修改源站应用的情况下管理复杂的 URL 改写规则。示例:迁移到新的 URL 结构,同时通过基于边缘的改写保持向后兼容。
JWT 验证: 在将请求转发到源站之前,在边缘验证 JSON Web Token(JWT)。在 CDN 层拒绝未经认证的请求,保护源站免受未授权访问。
图片优化:
基于客户端的 Accept 头部,在边缘调整图片大小、转换格式(WebP/AVIF)和压缩,减少源站的存储和带宽需求。
EdgeRoutine 部署
- 用 JavaScript(ES6)编写 EdgeRoutine 代码
- 将代码上传到 EdgeRoutine 控制台或通过 API 上传
- 将 Routine 关联到 CDN 域名和触发器(URL 模式)
- 在发布到生产环境之前,使用 EdgeRoutine 预发环境进行测试
- 在 EdgeRoutine 控制台中监控执行指标(调用次数、错误数、延迟)
性能与限制
EdgeRoutine 按调用次数和 GB-秒计算时间计费。主要限制:
- 执行超时:默认 30 秒,可配置最多 120 秒
- 内存:每次执行 128 MB
- 代码大小:每个 Routine 5 MB
- 子请求:每次执行最多 20 个并发 fetch 调用
对于高吞吐量场景,请彻底测试您的 EdgeRoutine 代码。简单的实现可能会增加显著的延迟。对大负载使用流式 API,避免同步阻塞操作。
性能监控与优化
CDN 实时监控
CDN 控制台提供实时监控仪表盘:
- 流量与带宽: 监控总带宽(bps)和数据传输量
- 请求数: 总请求数和按状态码(2xx、3xx、4xx、5xx)分类的请求数
- 缓存命中率: 整体和按域名的命中率
- 延迟指标: 平均首字节时间、总下载时间(按区域和 ISP)
- 回源带宽: 回源请求消耗的带宽
需要监控的关键指标
| 指标 | 目标值 | 低于目标时的措施 |
|---|---|---|
| 缓存命中率(静态) | >90% | 审查缓存规则,增加 TTL,检查导致缓存未命中的查询参数 |
| 缓存命中率(动态) | >70% | 启用动态加速功能,审查缓存键配置 |
| 首字节时间 | <50ms(P95) | 检查目标区域边缘节点覆盖情况,审查源站性能 |
| 源站 5xx 错误率 | <0.1% | 排查源站健康状况,实施源站故障转移 |
| CDN 5xx 错误率 | <0.01% | 检查 CDN 边缘节点健康状态,审查回源配置 |
日志分析
启用 CDN 访问日志,输出到 OSS 或日志服务(SLS)。日志包括:
- 客户端 IP、请求 URL、HTTP 方法、状态码
- 缓存命中/未命中状态
- 响应大小、下载速度、首字节时间
- 回源状态与延迟
- 使用的 TLS 版本和加密套件
使用日志分析来:
- 识别本应被缓存但未被缓存的内容
- 检测配置变更后的性能回退
- 按区域分析流量模式,指导边缘节点选择
- 排查用户报告的个别问题
缓存优化技术
缓存键自定义: 默认情况下,CDN 缓存键包含完整的 URL(路径 + 查询字符串)。自定义缓存键以忽略不影响内容的特定查询参数:
示例:/api/products?session_id=abc123&category=electronics
- 不进行过滤:每个 session_id 都会创建独立的缓存条目(低效)
- 过滤 session_id:相同 category 的所有请求共享一个缓存条目(高效)
在 CDN 控制台的"缓存配置" → "缓存键"下配置缓存键过滤。
参数过滤: 对于带有追踪参数的 API 端点(utm_source、gclid、fbclid),将这些参数添加到"保留参数"列表中,使其从缓存键中移除但仍转发到源站。
大文件优化: 对于视频文件和大文件下载(>10 MB),启用"范围回源"——CDN 仅获取客户端请求的字节范围而非整个文件。这显著降低了部分下载和视频拖动场景的回源带宽。
多区域与全球加速策略
DCDN(全站加速)
阿里云 DCDN(动态内容分发网络)将 CDN 能力扩展到动态、不可缓存的内容。DCDN 利用阿里云的全球骨干网络加速动态内容交付:
- 智能路由: DCDN 基于实时网络状况选择最优路径,绕过拥塞的互联网路由
- 协议优化: DCDN 节点间透明的 TCP 优化,减少丢包对吞吐量的影响
- 连接多路复用: DCDN 边缘节点将客户端连接多路复用到源站的持久连接中,减少源站连接开销
对于无法缓存但延迟至关重要的 API 端点、个性化内容和电商交易流程,使用 DCDN。
全局 DNS 负载均衡
对于真正的全球应用,将 CDN 与阿里云 DNS 相结合以实现智能 DNS 解析:
- 配置基于地理位置的 DNS 策略,将用户引导至最优的 CDN 域名或源站
- 实施基于 DNS 的故障转移:如果 CDN 域名不可用,DNS 自动将流量路由到备用端点
- 使用 DNS 健康检查来验证端点可用性并自动更新 DNS 记录
多源站故障转移
在 CDN 控制台中配置备用源站以应对源站故障:
- 主源站: 您的主要源站服务器(SLB、OSS、ECS)
- 备用源站: 辅助源站,可能位于不同区域或不同的存储服务上(例如,不同区域的 OSS 存储空间)
- 故障转移逻辑: 如果主源站返回 5xx 错误或超时,CDN 会自动通过备用源站重试请求
这提供了应对区域性源站故障的弹性,无需应用级的多区域逻辑。
成本优化
CDN 成本主要由数据传输(出站流量)和 HTTPS 请求驱动:
数据传输优化:
- 积极的缓存可降低回源流量成本
- 在通过 CDN 提供之前压缩资源(gzip、Brotli)
- 使用 WebP/AVIF 图片格式减少传输大小(比 JPEG/PNG 小 30-50%)
- 对图片和视频实施懒加载
HTTPS 请求优化:
- HTTPS 请求会产生少量额外费用。使用 HTTP/2 多路复用减少连接数
- 启用 OCSP 装订消除每次请求的证书检查
- 通过合并小文件(CSS/JS 打包)最小化 HTTPS 请求数
带宽包预订: 如果您有可预测的 CDN 流量,请购买数据传输计划或带宽包以获得显著折扣(通常比按需定价低 20-50%)。
总结
阿里云 CDN 远不止是一个缓存层——它是一个全面的边缘平台,能够加速内容分发、通过托管 SSL/TLS 保护应用安全,并通过 EdgeRoutine 实现无服务器边缘计算。通过实施本指南所述的配置和优化——从缓存规则设计到 TLS 1.3 部署和基于 EdgeRoutine 的个性化——您可以为全球用户提供低于 50 毫秒的体验,同时保持安全并控制成本。
CDN 和边缘计算领域持续演进。请关注基于 WebAssembly 的边缘运行时、HTTP/3 支持以及与边缘 AI 推理更紧密集成的进展。阿里云的全球基础设施投资确保了 CDN 在未来多年中仍将是云原生架构的关键组成部分。
本文由 2.chengzicloud.cloud 提供,点击访问首页了解更多