cdn 对象存储应用实战——博客的搭建

嗯,终于写到实战应用了。这次用自己的亲身经历说说 cdn 和对象存储在个人博客中的的应用。

感兴趣的话,可以看看之前的两篇文章,分别说了《cdn 入门》和《对象存储入门》。

特殊要说明的是,中国大陆域名建议备案,否则可能无法启用 cdn 或者解析服务。

而备案可能需要大陆购买虚拟主机(空间)来协助,中国大陆有了空间,那还整啥 cdn?其实果真如此,意义不是特别大,除非为了 https 访问。

所以以上,有可能导致鸡生蛋蛋生鸡的问题…

本文不考虑域名备案等问题。默认按已备案,服务均可用情况讨论。

同样的,静态博客和动态博客也不讨论好坏,各有千秋。

个人博客的常见方案

个人自建博客,一般从博客系统、架设、域名上,常见方案不过几种。

博客系统

  • 使用动态类技术实现(wordpress ghost 等)
  • 使用静态系统(hexo jekyll 手写页面等)

发布环境

  • 云主机(虚拟主机)
  • 自己架设 VPS 等
  • github pages (gitlab pages,coding pages)等

域名

  • 使用 github pages 默认域名
  • 自己的域名

常见方案

综合上面的集中方式,一般技术类博客常见方案有:

  1. 使用静态博客系统,部署到 github pages 上。有域名的话,还会自己配置上域名。

    优点:不花钱部署,不考虑流量。访问速度慢。

    缺点:绑定自己域名,没办法 https。不绑定域名,默认域名不够个性。

  2. 使用静态或者动态博客系统,部署到廉价虚拟主机上。同时配置自己的域名。

    优点:比如阿里云曾经的廉价共享虚拟主机,成本低,速度快,流量有限制,但一般都够用。

    缺点:绑定自己域名,没办法 https。

由于自己有 vps 的话,默认你能力较强,基本上就可以参考之前的文章配置上 cdn 来提速了。本文不再考虑这种情况。

通过上面两种方案,可以看出,除了静态动态博客不一样外,主要问题在于:

  1. 用了 github pages,速度慢。

  2. 都不能配置上 https。

本文就是针对这两个问题,来说明如何处理个人博客速度问题和 https 访问问题。

针对 github pages 等静态网站国内化、cdn 处理

本操作,主要是把国外的网站内容转移到国内,方便后续进行 cdn。当然,转移到国内后,也可以直接配置域名,当作 http 网站直接访问。这样等同于你有了一台国内的静态网站的服务器。

真实案例:本博客的 收藏集 栏目。网址:http://collection.yukapril.com

这个栏目采用了静态博客(jekyll)+ github pages 部署方式。并绑定域名。

因为 github pages 国内访问慢,所以直接 cdn 加速就比较吃亏,首次回源各地区都很慢。所以,需要在国内架设服务器进行回源使用。

  1. 首先要对其开通对象存储功能,用于在国内充当本地服务器。

    这里多说一句,貌似腾讯云不能访问 github pages 网站。我曾经没有回源成功。

  2. 在对象存储里面,配置回源(镜像),内容为 github pages 网址。

    这里需要注意:github pages 访问必须是域名形式,不能是域名后面带有路径的形式(比如 http://yukapril.github.io/collection)。因为这两种形式,生成的页面资源路径是不同的。

    你可以用默认的github pages 自己用户名创建一个,或者绑定一个自己的随意域名(这个域名起到过渡作用,不会被用户访问)。

    同时,配置上默认首页(静态网站)功能为开启。

    好了,到这里国外的资源,已经复制到国内一份了。

  3. 通过 cdn 部署域名。

    如果你期望 https 访问,那么需要自己准备 ssl 证书。当然,很多服务商提供免费一年的服务。不过我还是建议自己单独去申请,因为我发现服务商要么限制只能申请一个,要么就是申请速度很慢。

    申请 ssl 的话,可以到这里免费申请:https://freessl.org/

    下面来配置我们自己的域名。

    找到 cdn 栏目。增加一条我们希望最终访问的域名记录。

    源站类型选择 “对象存储”。之后选择相应的源站就好。

    业务类型选择 “全站加速” 或者 “静态加速”。

    缓存时间建议选择长一点。因为修改文件后,我一般是通过手动触发缓存刷新形式。如果你懒的这么做,可以设置短一点,它失效后会自动刷新。

    如果有 ssl 密钥,那么直接上传配置好就可以。

    最后配置好 cname,等待生效后就可以访问了。

    至此,我们的网站就配置完成了。如果是 https 访问,注意关注计费。我了解到国内服务商都没有针对 https 免费免流量的情况。

针对虚拟主机 cdn 加速处理

如果你的是动态博客,不论是否国内外,都不能带上对象存储,否则每次都要手动清理对象存储的缓存,比较麻烦。

如果你的是静态博客,但是在国内,也不需要带上对象存储,因为带上了意义不大。

综上,就有这一套直接上 cdn 的方案。

  1. 首先,确保你的博客域名,是一个无关域名。如果能 IP 访问的话,无所谓。

    这一步要保证你的博客可以通过备用域名进行连接,或者 IP 进行连接。到时候让 cdn 回源使用。

    如果你没有办法通过独立 IP 访问,要配置备用域名,因为主域名一会要配置给 cdn 来用。

  2. 直接开通 cdn。

    同样的,如果需要 https 访问,请参考上文先去获取证书。

    下面来配置我们自己的域名。

    找到 cdn 栏目。增加一条我们希望最终访问的域名记录。

    源站类型选择 IP 或者 “源站域名”。

    注意调整下回源 HOST:如果是 IP 回源,而且你的 IP 不是独立 IP,或者需要通过主机头进行区分的话。此时注意配置好回源主机头。建议采用第一步的备用域名,这样省事。当然也可以在主机上加一条 cdn 加速域名的主机绑定记录。

    业务类型选择 “全站加速” 或者 “静态加速”。

    缓存时间建议选择长一点。因为修改文件后,我一般是通过手动触发缓存刷新形式。如果你懒的这么做,可以设置短一点,它失效后会自动刷新。

    如果有 ssl 密钥,那么直接上传配置好就可以。

    最后配置好 cname,等待生效后就可以访问了。

注意点

  1. 你如果配置了根域名(比如 abc.com),那就是根域名配置了 cname,此时根域名不能配置 mx 邮箱解析了(即不能分配 test@abc.com 这种形式的邮箱)。需要二选一。所以建议考虑使用 www.abc.com 这种域名配置 cdn。

  2. 注意观察缓存命中率。一般静态博客命中率应该比较高,全部缓存后,理论应该为 100%。一般也应该 80% 以上。当然前提是缓存后才有效。

  3. 自己访问 cdn 域名试试看,一般 cdn 厂商都会有特殊文件头返回。

    比如阿里云,是 x-cache: HIT ...。确保第二次访问后,有 HIT 字样。

    查阅主要有两种方式

    1. 使用 curl -I https://abc.com 来检查。

    2. 使用浏览器,开发者模式,关闭缓存(否则可能返回200 from cache,304 not modified),访问网站,查看 network 面板的访问记录。