之前看过好几位大佬的博客,就是关于怎样利用CDN去加速博客,不过都是阿里云下去设置的,而我自己主要用的是腾讯的云存储,所以对着教程来失败了。
这一次趁着正好有时间,又好好的研究一下。
同时网上我也还没有搜到用腾讯云COS加速handsome的文章,希望能给需要的人一些帮助。

本文参照Naraku大佬的博客

关于网站的加速思路

我把网上教程的思路总结了一下,简单的来说加速分两步走。

  1. 把handsome的静态资源包括网站上的图片都放在云存储上,访问的时候给服务器减轻负担,提升速度。
  2. 设置一个CDN加速域名,然后域名添加一条cname记录,实现全站加速。

我当时候看的时候就在想,做第二步全站加速就好了,为啥还要第一步,感觉有点多此一举。而且做第二步全站加速的时候,第一步放在云存储上的静态资源会怎么样,也会被加速吗?感觉在套娃,我被整晕了。
然后我的网站上大部分的图片都是放在图床上,那么其实我只完成第一步估计也差不多呀,反正网站上就那些内容。
折腾完之后我得到了一些答案:

  • 如果只设置第一步,虽然大部分的静态资源都是访问云存储,但是还是会访问到网站主体,我的服务器IP之类的。有了第二步的话(我看大家都是讲套CDN是吧),访问的就不是我的真实IP,(我看到有人说第一次回源会暴露真实IP还是怎样,我就没仔细研究了)不同地区的人会访问都会连接到就近的CDN节点,访问速度加快。
  • 如果只设置第二步全站加速,那么访问网站的时候所有的数据就会从自己的服务器上回源。如果同时设置好第一步的话,一些静态资源就会直接访问云存储,减轻服务器上的负担。(我感觉好像差别不是很大...也有可能是我的理解错误)

操作流程

静态资源CDN

那我们就先操作第一步,把静态资源放到云存储上,大致要做一下这个几件事情

  1. 腾讯云的对象存储里创建一个存储桶
  2. 设置好回源配置
  3. 绑定一个自定义加速域名(也可以不绑定)
  4. 设置好缓存配置
  5. 跨域设置
  6. handsome填入参数

首先是去到腾讯云的控制台,找到对象存储,并点击左侧边栏的存储桶列表
腾讯云控制台
然后点击创建存储桶,填入名称、地域、设置访问权限,其他的可以不做更改。
存储桶设置

  • 名称根据喜好随意填写
  • 所属的地域当然选择自己所在的区域
  • 访问权限为了安全起见,还是选择私有读写,过会分配权限给CDN域名即可

创建完成之后,页面自动跳转到存储桶的管理界面,我们在左侧边栏找到基础配置下的回源设置,并选择添加回源规则
存储桶的管理界面


之前不是太懂什么是回源,什么是回源站点。现在仔细想想,源就是源头的意思,也就是资源最早的地方。比如说我现在要访问存储桶里的一张图片,这张图片是a.jpg,但是存储桶里没有。那怎么办呢?这个时候就可以回源,从回源站点把这个资源下载到存储桶里面,以供访问。
所以在咱们这个设置里面,回源站点就要我们自己的网站地址。

添加回源规则
这个里面主要是填写回源地址,我们如果要填写IP地址且用的是宝塔面板的话,我们需要在宝塔的站点设置上,添加好IP地址,否则会回源失败。(当然解析到我们网站的其他域名也行,都是一样的效果)
宝塔面板添加IP
好的,添加好回源地址,存储桶这一步的操作暂时就可以结束了。
腾讯云会自动分配一个访问存储桶的域名,我们去到handsome的后台-速度优化-本地资源云存储里填上https://域名 | QCLOUD,其实就算弄好了,也就是说现在网站的静态资源会从腾讯云分配的域名里面走。
handsome后台
当然啦,这样的加速还不太符合我们的预期,因为现在虽然是访问了腾讯云上的资源,但是还没有CDN加速的特性,可能只是存储桶在哪个地区,哪个地区就快一些。
所以我们接下来给这个对象存储绑定一个自定义CDN域名,这样的话静态资源就会被CDN加速。

腾讯云也提供了一个默认的加速域名,一键开启即可,而且不需要配置ssl证书,其实是非常方便的,即开即用。不过域名有点长,有点强迫症的我还是觉得自己去自定义一个。


我们再次通过腾讯云的控制台进入内容分发网络,并点击左侧边栏的域名管理,准备添加一个CDN加速域名。
内容分发网络
这里要填写的很多,底下还有一个高级配置。
CDN加速域名设置

  • 首先是加速域名这里,自定义一个二级域名。比如说我的域名是xhhdd.cc,那么我就可以填写cdn.xhhdd.cc,总之不冲突就行。
  • 然后是业务类型,给网站加速的话一般选择默认的静态加速就可以了。
    见下图
  • 然后是源站配置,我们选择cos源,并选择好刚才自己创建的存储桶,然后下方打开私有存储桶访问(如果刚才存储桶设置的不是私有读写的话那就不用)。

服务配置


最下面这个缓存设置就是真的重点了,我们看它默认有两条规则,第一个就是全部文件遵循源站缓存,第二个就是php等文件不缓存,因为这些文件缓存了基本上会造成登录失败等各种各样的问题,所以我们依旧保留这个,并删除第一条。接下来添加以下的规则。
规则
说实话这个规则是我抄别人的,可能还得根据自己的需求调整一下。
我又仔细研究了一下,可以点击下方的文章参考一下。

以上,我们的加速域名基本上配置好了,我们还需要做三件事情。

  1. 如果开了https回源,那么要配置好ssl证书
  2. 按提示去域名商那配置一条cname记录,主机填写刚才配置的自定义域名,记录值由腾讯与提供。
  3. 设置好防盗链等一些安全设置,防盗链记得要把自定义CDN域名也加上去。

最后是最重要的开启跨域访问
跨域访问在对象存储跟内容分发网络这里都可以开启,如果选择是使用自定义CDN域名的,则打开域名管理-高级配置里的Response Header

接下来我们打开配置转态的开关,并添加一条规则:

  • 参数:Access-Control-Allow-Origin
  • 值:*
    新增规则

最后,在handsome的后台填入https://自定义CDN域名 | QCLOUD,然后去浏览器强制刷新两次(第一次回源,第二次才使用CDN加速)就大功告成了!

可以去腾讯云看看对象存储里面是不是多出了handsome的静态文件,是的话就是设置成功了。或者在chrome下按Fn+F12,看一下js,css文件的链接是不是已经变成了自己的自定义CDN域名,也可以验证有没有成功。

开启全站加速

还是在内容分发网络这里,再次创建一个域名。那这个域名就是以后即将作为网站的主域名。
那么选定什么呢?
当我们直接选择一级域名时也就是xhhdd.cc时,是可以顺利创建的。但是创建完成之后,我们需要去域名商那里添加一条cname记录。如果没有设置域名邮箱,没有添加过MX记录的话,是没有什么问题的,但是如果添加过MX记录的话,就会有冲突。
这个问题我研究了很久,得出以下几条信息:

  • 一级域名的MX记录与cname记录基本上不能完美共存,有的域名商(如阿里云)不能同时添加这个两条记录,有的域名商允许同时添加两个记录,但据说邮箱服务会受到一些影响。
  • 可以选择把www.xhhdd.cc作为网站的主域名去套CDN,然后xhhdd.cc做一个显性或隐性的转发,转发到www.xhhdd.cc
  • 用二级域名添加邮箱记录,如mail.xhhdd.cc,那么域名邮箱则会变成dd@mail.xhhdd.cc这种形式。当然也可以直接换一个域名去做域名邮箱

那我选择放弃域名邮箱,还是用xhhdd.cc来添加cname记录。
再次添加域名
与刚才要填的参数差不太多,其他的都照常。
主要是源站配置这里我们选择自有源,并且填好我们服务器的ip地址。(当然解析到我们网站的其他域名也行,都是一样的效果)如果是宝塔面板要记得在网站管理那里加上ip地址!(上文也有提示过)

接下来的事情跟刚才基本上一样

  1. 如果开了https回源,那么要配置好ssl证书
  2. 按提示去域名商那配置一条cname记录
  3. 设置好防盗链等一些安全设置
  4. 网站能够稳定运行之后,去试一下hsts等提高网页访问速度的设置

我们可以直接ping一下网站,看ip是不是已经变化了。
接下来还可以看一下浏览器的开发者工具里面看一下,找一个之前没被加速的文件
CDN命中
最底下一行的X-Cache-Lookup会显示CDN有没有命中资源

  • X-Cache-Lookup:Cache Hit 表示命中
  • X-Cache-Lookup:Hit From MemCache 表示命中 CDN 节点的内存。
  • X-Cache-Lookup:Hit From Disktank 表示命中 CDN 节点的磁盘。
    有时候也会同时返回多条X-Cache-Lookup,一般有Hit From Upstream代表没有命中。

其他问题

  • 已经跟handsome的作者确认过,时光机页面的图片不会更换成我们第一步填写的静态资源域名。也就是说当我们打开时光机页面时,上面的图片依旧是访问本地的usr/uploads/time路径。据说在后续会解决这个问题。
  • 腾讯云跟https有关的hsts配置ocsp配置tls版本设置强制跳转https,我都开通了,感觉速度上似乎差别不是很大。跟安全有关的设置了带宽封顶IP访问限频。总之都是一些字面意思比较好理解的功能。

总结

最后捋一下。
我一共设置了两个加速域名,一个是跟存储桶进行绑定的,静态资源访问时的域名。
另一个就是站点的域名,套上了CDN,起到全站加速的效果。

第一次访问站点

  • 所有的文件显示都来自xhhdd.cc
  • 其中大部分静态资源去了我的资源域名handsome.xhhdd.cccos存储空间进行拉取资源,并且没有访问到,所以直接返回源站域名xhhdd.cc。同时cos存储空间在源站拉取静态资源,文件列表下多出/usr文件。
  • 其中另一部分资源访问CDN节点没有找到资源,也是直接回源,并且显示CDN命中失败。

第二次访问站点

  • 一部分文件显示来自xhhdd.cc,一部分显示来自handsome.xhhdd.cc
  • 其中来自xhhdd.cc的可以观察到已经被CDN所命中,而handsome.xhhdd.cc则是来自cos对象存储的的静态资源

最后修改:2021 年 05 月 06 日
如果觉得我的文章对你有用,请随意赞赏