一、CDN 是什么
CDN(Content Delivery Network,内容分发网络) ,简单说就是:把网站的静态文件复制到全球各地的服务器上,让用户从最近的服务器获取内容。
一个生活类比
想象你开了一家连锁奶茶店:
-
没有 CDN:全国只有一家总店(源站),所有人都得跑到总店买,排长队、等很久
-
有 CDN:每个城市都开分店(边缘节点),顾客就近买,快且总店不挤
CDN 就是这套"分店网络"。
它解决的核心问题
| 问题 | CDN 如何解决 |
|---|---|
| 用户离服务器远,加载慢 | 就近节点响应,延迟从 200ms 降到 20ms |
| 源站带宽不够,一高并发就崩 | 大部分请求被 CDN 挡下,不回源站 |
| 跨地域访问不稳定 | 多地节点冗余,某地故障可切换 |
| DDoS 攻击打源站 | CDN 分散流量,源站 IP 被隐藏 |
二、CDN 怎么用
分两种情况:自己搭 vs 用云厂商。99% 的人选后者。
方式一:用云厂商 CDN(推荐)
主流选择:阿里云 CDN、腾讯云 CDN、Cloudflare、AWS CloudFront。
核心步骤只有 4 步:
第 1 步:准备源站
源站 = 你真正存放文件的服务器。可以是:
-
自己的服务器(如
1.2.3.4) -
对象存储(如阿里云 OSS、AWS S3)
-
另一个域名
第 2 步:在 CDN 控制台添加域名
假设你的网站是 www.example.com,静态资源放在 static.example.com。
在 CDN 控制台添加加速域名 static.example.com,并指定源站地址。
第 3 步:配置 DNS
CDN 会给你一个 CNAME 地址,比如:
text
bash
static.example.com.w.kunlun.com
你去域名服务商(如阿里云 DNS)把 static.example.com 解析到这个 CNAME。
之后用户访问
static.example.com,实际会打到 CDN 节点,而不是你的源站。
第 4 步:配置缓存规则
告诉 CDN 哪些文件缓存多久:
| 文件类型 | 缓存时间 | 理由 |
|---|---|---|
| 图片/字体 | 30 天 | 基本不变 |
| CSS/JS(带 hash) | 1 年 | 文件名变了就是新文件 |
| HTML | 几分钟 | 可能频繁更新 |
| API 接口 | 不缓存 | 每次都要最新数据 |
完成。 之后用户请求静态资源,CDN 自动就近响应。
方式二:自己搭 CDN(了解即可)
用 Nginx 做反向代理缓存,在多地部署节点,配合 DNS 智能解析。成本高、运维复杂,一般只有大厂才自建。
三、一个具体例子
假设你有个网站 www.example.com,图片放在 www.example.com/images/logo.png。
没上 CDN 时:
text
bash
用户(北京)──> 源站(上海)──> 返回图片
延迟:约 100ms
上了 CDN 后:
text
bash
用户(北京)──> 北京 CDN 节点(有缓存)──> 直接返回
延迟:约 10ms
如果北京节点没有缓存:
用户(北京)──> 北京 CDN 节点 ──> 回源站拉一次 ──> 缓存下来
(下次其他北京用户就直接命中)
四、什么时候该用 CDN
适合用:
-
网站有大量静态资源(图片、视频、JS、CSS)
-
用户分布在全国/全球
-
有突发流量(如秒杀、活动)
-
想防 DDoS 攻击
不太需要:
-
纯内部系统(用户都在同一个办公室)
-
几乎没有静态资源
-
访问量极小
五、常见误区
| 误区 | 真相 |
|---|---|
| "CDN 能加速所有请求" | 只加速静态资源,动态 API 需要另配"动态加速" |
| "上了 CDN 就一劳永逸" | 要配缓存策略、刷新机制,否则用户看到旧内容 |
| "CDN 很贵" | 按流量计费,小站每月几块钱,Cloudflare 还有免费版 |
| "CDN 会泄露源站 IP" | 正确配置后源站 IP 是隐藏的,反而更安全 |
六、一句话总结
CDN = 把静态文件复制到各地服务器,用户就近取,快且不压源站。
用法 = 云厂商控制台加域名 + 配 DNS + 设缓存规则,4 步搞定。