CDN 使用初探

CDN 是什么

CDN(Content Delivery Network),即内容分发网络,是指一组在地理上分散的服务器,它们协同工作以提供互联网内容的快速交付。

CDN 可以快速加载互联网内容,包括 HTML 页面、javascript 文件、CSS 文件、图像和视频等。

使用 CDN 的原因

具体使用

wu.run 是静态网站,一开始是托管在 GitHub 上,网站里的图片是放在免费的图床上。但是免费的图床不稳定,很容易就不能访问。后来,网站托管在阿里云轻量服务器上,网站的图片也是放在上面,但是服务器的带宽有限,图片较大时,访问体验较差。所以就想使用 CDN 加速图片访问速度。

云服务厂商基本都支持 CDN 服务,这里我选择了七牛云,因为七牛云提供每月 10G 免费流量。使用国内 CDN 服务的前提条件是需要有一个已备案的域名。不同云服务厂商 CDN 服务配置流程基本相同。

添加 CDN 域名

如七牛云添加 CDN 域名,包含三部分:域名配置、源站配置、缓存配置。

域名配置,填写需要加速的域名,这里我是使用二级域名:cdn.wu.run 作为 CDN 加速域名。你也可以使用类似 static.example.com 域名,这样的域名一看就知道大概率是 CDN 域名。

源站配置,所谓的源站,就是 CDN 缓存不存在或者 CDN 缓存失效时,从哪个地方拉取这些文件。这里我使用的七牛云的对象存储作为源站,即图片都存储在对象存储中,CDN 缓存不存在或者 CDN 缓存失效时,从这个对象存储中拉取。当然,源站可以不仅是七牛云对象存储,还可以是源站域名、IP 地址,以及高级设置中设置主备路线。

缓存配置,用于设置缓存时间,即 CDN 缓存文件的过期时间,我这里是使用推荐配置。

添加 CDN 域名解析

CDN 域名创建后,会提示添加 CDN 域名解析。添加 CDN 域名解析的作用就是让 CDN 域名解析到云厂商的服务器,从云厂商的服务器上拿到需要的文件(如图片资源)。如 wu.run 域名是阿里云上购买的,需要到阿里云上添加该域名一条新解析,一般是一条 CNAME 记录。

解析添加成功后,我们探测下 cdn.wu.run 这个域名。

 ~  dig cdn.wu.run

; <<>> DiG 9.10.6 <<>> cdn.wu.run
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42478
;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;cdn.wu.run.			IN	A

;; ANSWER SECTION:
cdn.wu.run.		311	IN	CNAME	cdn-wu-run-idvfzm3.qiniudns.com.
cdn-wu-run-idvfzm3.qiniudns.com. 11 IN	CNAME	dt003.china.line.qiniudns.com.
dt003.china.line.qiniudns.com. 11 IN	CNAME	tinychinacdnweb.qiniu.com.w.kunlunno.com.
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.232
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.238
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.233
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.236
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.239
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.235
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.234
tinychinacdnweb.qiniu.com.w.kunlunno.com. 60 IN	A 111.19.241.237

;; Query time: 12 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Tue May 09 22:37:24 CST 2021
;; MSG SIZE  rcvd: 283

可以看到,cdn.wu.run 域名 已 CNAME 到 cdn-wu-run-idvfzm3.qiniudns.com。并经过多次 CNAME,直到转发到真正的 CDN 服务器上。

上传文件

因为这里我是用了七牛云对象存储作为源站,所以需要将图片上传到 CDN 域名绑定的七牛云对象存储中,且在七牛云上设置上传文件存储类型为标准存储。设置不同的源站,操作是不一样的。注意,如果对象存储的文件需要被外部访问,即作为 CDN 源站场景下,需要将对象存储的访问控制设置为公开空间。

上传成功后,就可以拿到文件的外链地址,这个地址就可以用于网站上。如 wu.run 网站上大部分图片地址是以 cdn.wu.run 开头的 CDN 域名。

访问控制

网站是公开访问的,其他人可以拿到网站上文件的链接,盗用这些链接用于其他地方,会造成我们 CDN 费用大涨(所以说免费的图床真的是用爱发电)。所以需要设置 CDN 域名访问控制。如七牛云会提供一些访问控制的选项,防止其他人盗链。

比如我这里开启了「Referer 防盗链」,设置了 Referer 白名单,并且 Referer 不能为空,否则只是拿到图片的 CDN 链接直接访问,将会返回 403 错误。

总结

以上是简单了解 CDN,并简单使用云厂商 CDN 服务的例子,更多的使用方法参考各家云厂商官方文档,这里就不再赘述了。