国内外 CDN 方案对比

CDN 选型没有“最好”,只有“最适合”。同样是加速,海外业务和国内业务面对的完全是两套规则:国内要求备案、价格按带宽或流量算、节点覆盖更密;海外按流量计费、Cloudflare 这类厂商提供免费额度还自带安全能力。这篇把主流方案按全球、国内、特性三个维度拆开讲,最后给出按场景的选择建议。文中价格只做量级参考,实际以各厂商官网实时报价为准。

海外主流 CDN

厂商 免费额度 起步价 节点数 擅长场景
Cloudflare 免费 / Pro $20 330+ 中小站点、安全 + CDN 一体
Bunny CDN 约 $1.40/TB 119 便宜、按量付费
AWS CloudFront 约 $0.085/GB 600+ AWS 生态用户
Fastly 约 $0.12/GB 150+ 高性能、边缘计算
Google Cloud CDN 约 $0.08/GB 200+ GCP 用户
Azure CDN 约 $0.08/GB 150+ Microsoft/Azure 用户

国内 CDN

厂商 价格 国内节点数 擅长场景
阿里云 CDN 约 $0.03/GB 2800+ 国内流量为主
腾讯云 CDN 约 $0.03/GB 2000+ 国内性价比
又拍云 约 $0.02/GB 100+ 图片站
七牛云 约 $0.02/GB 100+ 媒体处理

功能对比

特性 Cloudflare Bunny CDN AWS CloudFront
WAF ✅ 自带 ✅ 额外收费
DDoS 防护 ✅ 不限量 ✅ 基础 ✅ Shield(贵)
边缘计算 ✅ Workers ✅ Lambda@Edge
图片优化 ✅ Polish ✅ Optimizer ✅ 额外收费
免费 SSL ✅ ACM
HTTP/3
国内访问 ❌ 需备案 ✅ 国内区域

国内 CDN 的备案与计费细节

国内 CDN 和海外最大的差别在两条:备案和计费。备案方面,只要用国内厂商的 CDN 加速大陆访问,就必须先把域名在工信部完成 ICP 备案,这个过程通常要 1-3 周,新站要提前规划好时间。计费方面,国内厂商一般按带宽峰值或流量两种方式计费:带宽计费适合流量波动大、峰值明显的场景;流量计费适合总量可控、波动平缓的场景。不少厂商还提供月结 95 之类的弹性方案,小站通常直接选按流量更省心。

缓存命中率决定真实成本

CDN 的单价只是表象,真正决定成本的是缓存命中率。同样是每月 100GB 流量,命中率 95% 时回源只有 5GB;命中率 50% 时回源 50GB,源站带宽和数据库压力都会翻倍。想提升命中率,可以从三件事入手:给静态资源设置长缓存(比如 Cache-Control: max-age=31536000);把动态接口排除在缓存之外,避免“不可缓存却硬缓存”导致内容错乱;活动前用 CDN 自带的缓存预热,把热门资源提前推到边缘节点。

价格示例:每月 100GB 流量

厂商 预估月费
Cloudflare(免费) $0
Bunny CDN 约 $1.40
AWS CloudFront 约 $8.50
Fastly 约 $12.00
阿里云 CDN 约 $3.00

按场景推荐

场景 推荐 理由
个人博客 Cloudflare 免费版 免费、配置简单、自带安全
全球业务站 Cloudflare Pro($20) WAF + 性能 + DDoS
大流量全球站 Bunny CDN 每 GB 成本低、计价简单
国内业务 阿里云 CDN 大陆覆盖最好
深度使用 AWS CloudFront 与 AWS 生态深度集成
视频点播 Bunny CDN 大流量便宜

双线路方案

国内用户和海外用户都要覆盖时,最省心的做法是双线路:国内走阿里云 CDN,海外走 Cloudflare 或 Bunny,通过 DNS 智能解析按访客地理位置分流。

                 ┌──────────────────┐
User DNS Query →│  Smart DNS (NS1/  │
                 │  Alibaba DNS)    │
                 └────────┬─────────┘
                          │
              ┌───────────┴───────────┐
              │                       │
     China User                Global User
              │                       │
     ┌────────▼────────┐   ┌─────────▼────────┐
     │ Alibaba Cloud   │   │  Cloudflare /    │
     │ CDN             │   │  Bunny CDN       │
     └─────────────────┘   └──────────────────┘

一个真实场景:同时服务国内和海外访客

假设你在 16IDC 发布了一套面向全球的建站模板,同时有国内和海外访客。海外访客走 Cloudflare 免费版;国内访客则面临一个硬约束——域名没有 ICP 备案时,无法用自己的域名在国内 CDN 上加速。这时有两个选择:一是为国内单独备案一个域名;二是把国内流量交给国内云厂商的 CDN。很多人在这一步忽略了备案,导致国内访问慢还以为是 CDN 没配好。选型前先把“要不要服务大陆用户”这个前提定下来,后面的方案会清晰很多。

怎么验证 CDN 真的加速了

上线后别只看“看起来挺快”,要量化对比。用 curl -w 看首字节时间,把 CDN 域名和源站直连放一起比;用在线测速工具对比不同地区节点;再看 CDN 后台的缓存命中率和回源数据。一个简单的命令行检查:

curl -s -o /dev/null -w "DNS: %{time_namelookup}s | 连接: %{time_connect}s | 首字节: %{time_starttransfer}s\n" https://你的域名/static/app.css

如果首字节时间明显低于源站直连,说明 CDN 生效;如果差别不大,多半是命中率低,或者流量根本没走到边缘节点。

常见误区

  • 备案是硬门槛:用国内 CDN 加速面向大陆的域名必须 ICP 备案,这是前置条件,不是可选项;
  • 免费套餐要看清限制:Cloudflare 免费版不限制流量但优化能力有限,图片站可能不够用;
  • 不要只看单价:按量付费厂商可能有最低消费或按请求计费,小流量反而可能更贵。

参考:Cloudflare 定价 https://www.cloudflare.com/plans/ ,Bunny CDN 定价 https://bunny.net/pricing/ ,阿里云 CDN 文档 https://help.aliyun.com/zh/cdn/