CDN : Content Delivery Network/Content Distribution Network, 内容分发网络:将静态资源分发到多个不同的地方以实现就近访问
- 内容:指静态资源如图片、视频、文档、JS、CSS、HTML。
- 分发网络:指的是将静态资源分发到位于多个不同的地理位置机房中的服务器上,可以实现静态资源的就近访问,比如北京的用户直接访问北京机房的数据。
绝大部分公司都会在项目开发中使用 CDN 服务,但很少有自建 CDN 服务的公司。基于成本、稳定性和易用性考虑,建议直接选择专业的云厂商(比如阿里云、腾讯云、华为云、青云)或者 CDN 厂商(比如网宿、蓝汛)提供的开箱即用的 CDN 服务。
内容怎么放在CDN上:
预热:虽然没有用户请求这个CDN的某个网站,但是先把这个网站的静态资源放在CDN上,下次有请求来了,要这个网站就能直接给他。
要访问的资源在CDN中没有,需要从源站获取资源叫 回源。
如果资源有更新,可以对其 刷新 ,删除 CDN 节点上缓存的旧资源,并强制 CDN 节点回源站获取最新资源。
命中率 和 回源率 是衡量 CDN 服务质量两个重要指标。命中率越高越好,回源率越低越好
如何找到最合适的CDN节点?
GSLB (Global Server Load Balance,全局负载均衡)根据请求的 IP 地址、CDN 节点状态(比如负载情况、性能、响应时间、带宽)等指标综合判断选择哪个CDN节点:
CDN 会通过 GSLB 找到最合适的 CDN 节点:
- 浏览器向 DNS 服务器发送域名请求;
- DNS 服务器向根据 CNAME( Canonical Name ) 别名记录向 GSLB 发送请求;
- GSLB 返回性能最好(通常距离请求地址最近)的 CDN 节点(边缘服务器,真正缓存内容的地方)的地址给浏览器;
- 浏览器直接访问指定的 CDN 节点
如何防止资源被盗刷?
设置Referer 防盗链:根据 HTTP 请求的头信息里面的 Referer 字段对请求进行限制。我们可以通过 Referer 字段获取到当前请求页面的来源页面的网站地址,从而确定请求是否来自合法的网站
通常情况下,会配合其他机制来确保静态资源不被盗用,一种常用的机制是 时间戳防盗链 。安全性更强,加密的 URL 具有时效性,过期之后就无法再被允许访问。
时间戳防盗链的 URL 有两个参数:签名字符串,过期时间。签名字符串通过对用户设定的加密字符串、请求路径、过期时间通过 MD5 哈希算法取哈希的方式获得。