CDN 实践配置+原理篇
✨文章摘要(AI生成)
笔者在这篇文章中详细讲解了 CDN(内容分发网络)的基本概念、作用及其在阿里云对象存储中的配置过程。
CDN 通过将用户请求路由到最近的服务器,显著提高了内容加载速度并减轻了源服务器的负担。此外,CDN 还增强了安全性,能够有效防御 DDoS 和 MITM 等网络攻击。文章中提供了具体的配置步骤,包括如何将加速域名指向 CNAME 地址,以及如何映射自定义域名。通过对比不同的 OSS 配置方案,笔者指出方案四结合了 CDN 的优势与自定义域名的便捷性。在总结 CDN 的工作原理时,笔者清晰地描述了用户请求的整个过程,强调了 DNS 解析在 CDN 加速中的重要性。
整体而言,本文为 CDN 的应用提供了实用的指导。
前几天配置了下自己在阿里云的对象存储中的 CDN 加速,这里记录写个教程为引入,来讲解一下 CDN 的相关原理及过程,希望对你有所帮助
CDN 概念
CDN(Content Delivery Network,内容分发网络)是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
CDN 作用
CDN 一般会用来托管 Web 资源(包括文本、图片和脚本等),可供下载的资源(媒体文件、软件、文档等),应用程序(门户网站等)。使用 CDN 来加速这些资源的访问。
(1)在性能方面,引入 CDN 的作用在于:
- 用户收到的内容来自最近的数据中心,延迟更低,内容加载更快
- 部分资源请求分配给了 CDN,减少了服务器的负载
(2)在安全方面,CDN 有助于防御 DDoS、MITM 等网络攻击:
- 针对 DDoS:通过监控分析异常流量,限制其请求频率
- 针对 MITM:从源服务器到 CDN 节点到 ISP(Internet Service Provider),全链路 HTTPS 通信
除此之外,CDN 作为一种基础的云服务,同样具有资源托管、按需扩展(能够应对流量高峰)等方面的优势。
直接上手配置
前提是你已经开通了对象存储,本部分教程仅介绍从对象存储→CDN 加速,并以此为引,帮助回忆一下 CDN 的原理及过程;
控制台中进入对象存储应该是这个样子:
还有就是你应该在此之前准备一个域名,因为 CDN 本质上就是利用了 DNS,后续原理篇会讲到,所以需要一个域名,同时,如果你需要 HTTPS 访问,你还需要准备一个 SSL 证书,这个本章节不详细涉及,请自行配置;
我这里就不重新从零配置了,直接从已经配置的地方开始讲讲,详细配置教程可以看这个参考链接
我们从上面图中箭头指向的链接进入可以看到 CDN 相关的配置信息,有如下两个地方值得注意:
- CNAME:启用 CDN 加速服务需要将加速域名指向 CNAME 地址,这样访问加速域名的请求才能转发到 CDN 节点上,在这里就是我们的
oss.justin3go.com => CNAME
- 原站域名:我们对象存储中阿里云自动给的一个访问域名,一般来说是非常长一串的一个地址
- 我们自己的域名:我们想要外界通过这个来访问的一个域名,我这里就是
oss.justin3go.com
可以看到这里有三个地址(域名),那我们该如何进行解析呢?就是该如何进行域名映射,这就需要我们简单了解一下 CDN 的原理了,这时候之前记忆的八股文知识就被唤醒了...
先说是如何映射的:
oss.justin3go.com => CDN 加速的 CNAME
而前面那种图(从这往上数第二张图)中也配置了原站信息CDN 加速的 CANME => 原站 oss 域名
常见的 oss 配置方式
所以综上最后的域名映射关系就是下图中的方案四:
对于配置 oss 有如上如下四种方案(很基本的东西,这里简单做个对比方便大家理解):
- 方案一:用户直接方案 oss 域名
- 方案二:使用我们自己的域名对 oss 域名解析,方便记忆,就是我们平常域名拿来解析 ip 地址的作用,也是映射作用
- 方案三:使用 CDN 加速,有 CDN 的优势,如访问速度快
- 方案四:使用自己的域名对 CDN 域名进行解析,有方案二和方案三的结合优势
CDN 原理篇
这小节主要解决这个问题“为什么 CDN 加速需要单独一个域名”
回答也很简单,就是 CDN 本质上使用了 DNS 解析来做到访问最近的节点资源,接下来通过下面这张图详细说一下 CDN 整个一个访问过程:
用户未使用 CDN 缓存资源的过程:
- 浏览器通过 DNS 对域名进行解析(就是基本的 DNS 解析过程),依次得到此域名对应的 IP 地址
- 浏览器根据得到的 IP 地址,向域名的服务主机发送数据请求
- 服务器向浏览器返回响应数据
用户使用 CDN 缓存资源的过程:
- 对于点击的数据的 URL,经过本地 DNS 系统的解析,发现该 URL 对应的是一个 CDN 专用的 DNS 服务器,DNS 系统就会将域名解析权交给 CNAME 指向的 CDN 专用的 DNS 服务器。
- CND 专用 DNS 服务器将 CND 的全局负载均衡设备 IP 地址返回给用户
- 用户向 CDN 的全局负载均衡设备发起数据请求
- CDN 的全局负载均衡设备根据用户的 IP 地址,以及用户请求的内容 URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求
- 区域负载均衡设备选择一台合适的缓存服务器来提供服务,将该缓存服务器的 IP 地址返回给全局负载均衡设备
- 全局负载均衡设备把服务器的 IP 地址返回给用户
- 用户向该缓存服务器发起请求,缓存服务器响应用户的请求,将用户所需内容发送至用户终端。
结合刚才配置阿里云 CDN 的过程
- 用户访问
oss.justin3go.com
- 本地 DNS 进行解析发现
oss.justin3go.com
对应的是CDN 加速域名
,于是将域名解析权交给 CDN 专用的 DNS 服务器,该专用 DNS 服务器返回CDN 加速域名
- 用户请求
CDN 加速域名
,通过负载均衡返回离用户最近的一个节点资源;
我们的
oss 原站地址
会在 CDN 会定期同步资源到各个缓存服务器的时候使用,并且如果还未同步时,即缓存服务器还没我们将访问的资源时,会直接返回oss 原站地址
最后
有些细节部分并没有一一验证,如果我理解有误的话,欢迎友善指出🎉