什么是 CDN ?
CDN ( Content Delivery Network/Content Distribution Network 内容分发网络)
我们可以将内容分发网络拆开来看:
- 内容:指的是静态资源比如图片、文档、HTML。
- 分发网络:这些静态资源分发到位于多个不同的地理位置机房中的服务器上,用户就近请求资源,加快速度,减轻服务器负担。

绝大部分公司都会在项目开发中使用 CDN 服务,但很少会有自建 CDN 服务的公司。基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。
我们经常拿全站加速和内容分发网络做对比,不要把两者搞混了!全站加速(不同云服务商叫法不同,腾讯云叫 ECDN、阿里云叫 DCDN)既可以加速静态资源又可以加速动态资源,内容分发网络(CDN)主要针对的是 静态资源 。

同一个服务在在多个不同的地方部署多份(比如同城灾备、异地灾备、同城多活、异地多活)是为了实现系统的高可用而不是就近访问。
CDN 工作原理是什么?
静态资源是如何被缓存到 CDN 节点中的?
预热:通过将资源提前缓存到 CDN 节点中,用户请求资源可以直接从 CDN 节点中取。资源更新了,可以主动删除 CDN 节点上缓存的旧资源,并强制 CDN 节点回源站获取最新资源。
回源:如果不预热或者资源缓存过期,请求CDN 节点时,CDN将请求源站获取资源,会比没有CDN更慢(两次请求)
命中率 和 回源率 是衡量 CDN 服务质量两个重要指标。命中率越高越好,回源率越低越好。
如何找到最合适的 CDN 节点?
GSLB (Global Server Load Balance,全局负载均衡)是 CDN 的大脑,负责多个 CDN 节点之间相互协作
- 浏览器向 DNS 服务器请求;
- DNS 服务器向 GSLB 发送请求;
- GSLB 返回性能最好(通常距离请求地址最近)的 CDN 节点的地址给浏览器;
- 浏览器直接访问指定的 CDN 节点。
GSLB 会根据请求的 IP 地址、CDN 节点状态(比如负载情况、性能、响应时间、带宽)等指标来综合判断具体返回哪一个 CDN 节点的地址。
如何防止资源被盗刷?
Referer 防盗链:根据 HTTP 请求的头信息里面的 Referer 字段限制请求的来源页面地址对请求进行限制。
不过,如果站点的防盗链配置允许 Referer 为空的话,通过隐藏 Referer,可以直接绕开防盗链。
时间戳防盗链 :时间戳防盗链的 URL 通常会有两个参数一个是签名字符串,一个是过期时间。
时间戳防盗链 URL 示例:
http://cdn.wangsu.com/4/123.mp3? wsSecret=79aead3bd7b5db4adeffb93a010298b5&wsTime=1601026312wsSecret:签名字符串。wsTime: 过期时间。
除了 Referer 防盗链和时间戳防盗链之外,你还可以 IP 黑白名单配置、IP 访问限频配置等机制来防盗刷。
总结
- 基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。
