本文最后更新于 6 个月前,文中所描述的信息可能已发生改变。
前言
这几天搭建了自己的个人博客,采用的是 hexo(一个静态博客框架-生成器)进行搭建。所有的文章在最后都会被编译成为纯静态的 HTML 文件,也就是说它可以作为纯静态文件托管在如 GitHub Pages 等平台,而无任何后端。
所以从架构上来说我的整个站点是一个静态网站,这也是最为重要的一点。
这也是相比其他诸如 Wordpress、Typeecho 等博客系统最大的区别,因为此类博客系统往往意味着需要一台额外的服务器来部署后端。一旦你的博客与后端产生交互,当访问量提升时,对你服务器的性能(你的钱包)要求也无疑是巨大的挑战。
而现在有许多可以提供静态站点托管的服务商(大善人)。(谢谢你们!)
- GitHub Pages: 学生免费申请 Pro 账户后,可支持私有个人仓库(GitHub 国内速度欠佳)
- Netlify: 支持私有个人/组织仓库(国内速度可能欠佳)
- Vercel: 支持公开仓库(私有仓库须付费)(最近域名同样开始被屏蔽,国内速度可能欠佳)
- Cloudflare Pages: 支持私有个人/组织仓库
你仅需提供静态文件,他们便可以为你托管网站,而且可以自定义域名,而无须操心其他任何后端维护的事情。
当然他们也不是万能的,这些网站免费账号往往会有一个流量带宽的限制,以及并发数的限制,且国内速度欠佳。
这时候便该轮到 CDN 出马了。
什么是 CDN?
CDN 的全称是 Content Delivery Network,即内容分发网络。CDN 是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
更多的内容您可以参见 CDN | 百度百科
简而言之,CDN 做的事情就是将你的站点静态文件缓存在各个城市的节点,一旦有人访问你的站点,CDN 便会让其去最近的节点取资源,使得网站的访问速度尽可能提高。也分担了站点的访问压力。
为什么是又拍云?

国内存在很多的云服务商,都提供有 CDN 服务,比如像腾讯云、阿里云、七牛云等。
对了,它们都有很重要的一点,那就是需要备案。所以你需要先确保的你可以接受实名备案,且你的域名是可以备案的。(即为
.com
,.cn
等主流顶级域名,可参见 备案域名)
因为我的域名是在腾讯云购买的,所以最开始使用的是腾讯云的 CDN 服务,但后来在机缘巧合下发现了又拍云的 CDN 服务。所以曾在腾讯云和又拍云之间反复横跳,最终我还是选择了采用又拍云的 CDN 服务,因为其有几个吸引我的地方。
又拍云联盟
又拍云有一个名为「又拍云联盟」的活动。
即在页脚挂上又拍云的 LOGO(就像本站页脚一样),便会每月赠送 10 GB 存储空间和 15 GB 流量。而现在则直接折算为等额的代金券,按年发放,这相比其他的(白嫖)方案赠送额度更多,且更为方便。
譬如倘若某一个月流量较少,某一个月流量较多,都可以共享这张代金券。而若是按照腾讯云按月 10 GB 的制度,某个月没有用到 10 GB,就显得亏了,某个月不小心用超了,却又需要多付上一些钱财。
WebP 自适应
又拍云支持 WebP 自适应功能。
Webp 是谷歌针对网页推出的新一代图片格式,进一步减少了图片(动图也可)大小,虽然我也不知道他们怎么做到的,但是 WebP 格式的图片的确往往比 JPG 图片要小上许多。
对了,顺便安利一个谷歌出品的在线图片压缩工具 Squoosh。
当然与之对应的是解码时间的增加以及兼容性。
但谷歌已在 Chrome 浏览器中提供了 WebP 原生支持,而解码的时间相比图片压缩节约的传输时间可谓小巫见大巫。
目前基本所有主流浏览器都支持了 WebP 格式,但是仍有冥顽不化者,没错,那就是苹果家的 Safari。(IE:我已经连主流都不配了吗?)
2020 年 macOS 11 Big Sur 和 iOS 14 上的 Safari 14 也已经支持 WebP 了。
我也将博客内的部分图片全部转为 WebP 格式,但是后来朋友告诉我苹果手机无法正常加载图片,最后不得不作罢。而又拍云提供的 WebP 自适应功能无疑是我期待的。根据设备来决定返回 JPG 还是 WebP 格式,而我要做的只是把图片托管在又拍云的云存储中。
云存储 - 图床
说到云存储,其实各大云服务商都有各自类似的服务。腾讯云的叫作为对象存储(Cloud Object Storage,COS),阿里云的则叫作对象存储 OSS(Object Storage Service)。
博客图片对于站长来说有时是一个大难题,一是图片逐渐增多时、体积和备份的问题,二则是图片加载往往会占用不少带宽。所以我的博文也总是尽量以文字为主,偶尔穿插进几张图片。
写 Markdown 时,图片往往是使用链接的方式放在文章中,这是便会用到我们所说的图床。即上传自己的图片,它提供一个可以访问的链接给你。
有一些公共的图床服务,譬如 sm.ms、路过图床。你可以使用它们,但是图片往往会被审核、而在你毫不知情的情况下被删除,而使用的图床服务较为小众,还有跑路的风险。我博客此前不少的图片放在了 sm.ms
上,但是后来一段时间它在国内常常无法正常加载。
所以最后我基本都将其迁移至了又拍云的云存储,一是我可以享受又拍云独有的 WebP 自适应功能,二则是我可以共用我的代金券(继续白嫖),且在国内能有一个还不错的访问速度。
全球加速
虽然咱的博客基本都是中文,面向国内的,但是谁不想走向世界国际化呢?我自然也希望她(我的博客)能在国外同样可以流畅地打开。
而腾讯云赠送的 CDN 流量则只支持国内加速。又拍云则同样提供了全球加速的选项。
源站资源迁移
我的博客本质还是托管于 GitHub Pages 上的,而解析上 CNAME 解析到了又拍云的 CDN,又拍云的 CDN 去回源(也就是加载我 hananoryu.github.io
的资源),并缓存迁移到又拍云的服务器上。
这意味着,即便 GitHub 突然宕机(出现好几次了,哈哈哈),我的站点仍然可以借助又拍云缓存的站点内容得以正常访问。这也一并解决了 GitHub 拒绝百度爬虫的问题,让站点可以被百度正常检索。
其他
我也在一些知名开源项目的赞助商列表里看到了又拍云的身影,譬如 APlayer 等。因此,又拍云给我留下的印象挺还算不错。
好,说了这么多优点,本着一分为二的辩证思维,有没有什么缺点?
仔细想来,也有几个。
- 又拍云从体量上来说,自然不能和腾讯云、阿里云这些国内大厂商相比,因此节点/访问速度/稳定性可能略逊一筹,但对于我们(白嫖的)个人站长来说,却几乎可忽略不计
- 还有一点就是我并没有找到一个按钮来设置超额自动停止 CDN 服务的功能,当使用费用超过我的代金券时,它会变为欠款,而不是自动停止你的 CDN 服务,回源 GitHub Pages (当然其他几个云服务商这一点上也半斤八两)
如何使用 CDN?
说了这么多,我们来看一下如何用又拍云 CDN 加速自己的站点吧。
开始前需要确保拥有:1.已经成功部署到 GitHub Pages 的静态博客。2.已经备案的域名
创建服务
首先第一步,注册一个又拍云账号。
然后在控制台点击使用 CDN 加速服务并且创建一个 CDN 服务。
注意:
- 加速域名为你的 GitHub Pages 绑定的自定义域名(不是 GitHub 分配的域名),且域名已经备案
- 应用场景选择全站加速
- 回源协议:如果选择 HTTP,源站地址填入 GitHub 分配的域名(xxx.github.io)即可;如果选择 HTTPS,源站地址还是填入 GitHub 分配的域名,源站证书校验无需开启。
创建好之后,需要绑定你的网站的域名,绑定完成后,又拍云会提供一个 CNAME 地址。
拿到这个 CNAME 地址后,我们需要去你购买的域名提供商将 DNS 解析根据 CNAME 地址重新绑定。
因为我的域名是在腾讯云购买的,所以我这里就拿腾讯云举例子了,你可以去查找你所购买的提供商相关的设置方法。
在腾讯云的 DNS 解析管理平台为自己的域名添加解析记录,记录类型选择 CNAME,线路类型我们可以让境内的访问指向又拍云为我们提供的 CNAME 地址,而境外的访问就仍让其指向 GitHub Pages 的地址即可。
优化设置
缓存控制里设置参数跟随,这里比较坑的一点就是又拍云默认不跟随网址参数,也就是通过问好传参他根本就不识别,但是参数无法传递,所以一定要选择全程跟随参数。
性能优化中开启 Gzip 和 Brotli,开启页面压缩,开启 HTTP 302 调度。
HTTPS 中开启 TLS1.3,最低建议 TLSv1.1。
成本控制中开启 WebP 自适应。
HTTPS 证书设置
这一步很重要,需要设置 HTTPS 的证书,否则你的云 CDN 服务无法访问 HTTPS 协议的网站。
SSL 证书申请
如果你在其他地方已经拥有一个你的域名可以使用的 SSL 证书,你可以直接添加自有证书,若没有的话,可以在又拍云申请一个 SSL 证书(又拍云 SSL 证书申请)。
然后在 HTTPS 中管理 HTTPS 配置添加证书。
防护配置
为防止恶意攻击,建议在又拍云访问控制中,开启 IP 访问限制和 CC 防护。
IP 访问限制
这个是限制访问频率的,开启后需要添加限制规则。
CC 防护
URI 匹配规则填写 /*
,访问频率阈值可以设置为 200 次/分。
验证 CDN 加速成功
在命令窗口 ping 自己的域名
完成上面的步骤,我们就使用又拍云 CDN 对我们博客进行了加速,需要注意的是使用了 CDN 之后,我们博客在更新之后的页面不会立即刷新(对于用户来说),其实延迟的一会儿也不算是什么事,但是遇到着急的可以到又拍云的控制台手动刷新即可。
好,就是这样,下次见!
也祝你的站点访问速度越来越快!