之前看过好几位大佬的博客,就是关于怎样利用CDN去加速博客,不过都是阿里云下去设置的,而我自己主要用的是腾讯的云存储,所以对着教程来失败了。
这一次趁着正好有时间,又好好的研究一下。
同时网上我也还没有搜到用腾讯云COS加速handsome的文章,希望能给需要的人一些帮助。
本文参照Naraku
大佬的博客
关于网站的加速思路
我把网上教程的思路总结了一下,简单的来说加速分两步走。
- 把handsome的静态资源包括网站上的图片都放在云存储上,访问的时候给服务器减轻负担,提升速度。
- 设置一个CDN加速域名,然后域名添加一条
cname
记录,实现全站加速。
我当时候看的时候就在想,做第二步全站加速就好了,为啥还要第一步,感觉有点多此一举。而且做第二步全站加速的时候,第一步放在云存储上的静态资源会怎么样,也会被加速吗?感觉在套娃,我被整晕了。
然后我的网站上大部分的图片都是放在图床上,那么其实我只完成第一步估计也差不多呀,反正网站上就那些内容。
折腾完之后我得到了一些答案:
- 如果只设置第一步,虽然大部分的静态资源都是访问云存储,但是还是会访问到网站主体,我的服务器IP之类的。有了第二步的话(我看大家都是讲
套CDN
是吧),访问的就不是我的真实IP,(我看到有人说第一次回源会暴露真实IP还是怎样,我就没仔细研究了)不同地区的人会访问都会连接到就近的CDN节点,访问速度加快。 - 如果只设置第二步全站加速,那么访问网站的时候所有的数据就会从自己的服务器上回源。如果同时设置好第一步的话,一些静态资源就会直接访问云存储,减轻服务器上的负担。(我感觉好像差别不是很大...也有可能是我的理解错误)
操作流程
静态资源CDN
那我们就先操作第一步,把静态资源放到云存储上,大致要做一下这个几件事情
- 腾讯云的对象存储里创建一个存储桶
- 设置好回源配置
- 绑定一个自定义加速域名(也可以不绑定)
- 设置好缓存配置
- 跨域设置
- handsome填入参数
首先是去到腾讯云的控制台
,找到对象存储
,并点击左侧边栏的存储桶列表
。
然后点击创建存储桶
,填入名称、地域、设置访问权限,其他的可以不做更改。
- 名称根据喜好随意填写
- 所属的地域当然选择自己所在的区域
- 访问权限为了安全起见,还是选择私有读写,过会分配权限给CDN域名即可
创建完成之后,页面自动跳转到存储桶的管理界面,我们在左侧边栏找到基础配置
下的回源设置
,并选择添加回源规则
。
之前不是太懂什么是回源,什么是回源站点。现在仔细想想,源就是源头的意思,也就是资源最早的地方。比如说我现在要访问存储桶里的一张图片,这张图片是
a.jpg
,但是存储桶里没有。那怎么办呢?这个时候就可以回源,从回源站点
把这个资源下载到存储桶里面,以供访问。所以在咱们这个设置里面,回源站点就要我们自己的网站地址。
这个里面主要是填写回源地址
,我们如果要填写IP地址且用的是宝塔面板的话,我们需要在宝塔的站点设置上,添加好IP地址,否则会回源失败。(当然解析到我们网站的其他域名也行,都是一样的效果)
好的,添加好回源地址,存储桶这一步的操作暂时就可以结束了。
腾讯云会自动分配一个访问存储桶的域名,我们去到handsome的后台
-速度优化
-本地资源云存储
里填上https://域名 | QCLOUD
,其实就算弄好了,也就是说现在网站的静态资源会从腾讯云分配的域名里面走。
当然啦,这样的加速还不太符合我们的预期,因为现在虽然是访问了腾讯云上的资源,但是还没有CDN加速的特性,可能只是存储桶在哪个地区,哪个地区就快一些。
所以我们接下来给这个对象存储绑定一个自定义CDN域名
,这样的话静态资源就会被CDN加速。
腾讯云也提供了一个默认的加速域名,一键开启即可,而且不需要配置ssl证书,其实是非常方便的,即开即用。不过域名有点长,有点强迫症的我还是觉得自己去自定义一个。
我们再次通过腾讯云的控制台进入内容分发网络
,并点击左侧边栏的域名管理
,准备添加一个CDN加速域名。
这里要填写的很多,底下还有一个高级配置。
- 首先是
加速域名
这里,自定义一个二级域名。比如说我的域名是xhhdd.cc
,那么我就可以填写cdn.xhhdd.cc
,总之不冲突就行。 - 然后是
业务类型
,给网站加速的话一般选择默认的静态加速
就可以了。
见下图 - 然后是
源站配置
,我们选择cos源
,并选择好刚才自己创建的存储桶,然后下方打开私有存储桶访问
(如果刚才存储桶设置的不是私有读写的话那就不用)。
最下面这个缓存设置就是真的重点了,我们看它默认有两条规则,第一个就是全部文件遵循源站缓存,第二个就是php等文件不缓存,因为这些文件缓存了基本上会造成登录失败等各种各样的问题,所以我们依旧保留这个,并删除第一条。接下来添加以下的规则。
我又仔细研究了一下,可以点击下方的文章参考一下。
以上,我们的加速域名基本上配置好了,我们还需要做三件事情。
- 如果开了https回源,那么要配置好ssl证书
- 按提示去域名商那配置一条
cname
记录,主机
填写刚才配置的自定义域名,记录值
由腾讯与提供。 - 设置好防盗链等一些安全设置,防盗链记得要把自定义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地址!(上文也有提示过)
接下来的事情跟刚才基本上一样
- 如果开了https回源,那么要配置好ssl证书
- 按提示去域名商那配置一条
cname
记录 - 设置好防盗链等一些安全设置
- 网站能够稳定运行之后,去试一下hsts等提高网页访问速度的设置
我们可以直接ping一下网站,看ip是不是已经变化了。
接下来还可以看一下浏览器的开发者工具里面看一下,找一个之前没被加速的文件
最底下一行的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.cc
对cos存储空间
进行拉取资源,并且没有访问到,所以直接返回源站域名xhhdd.cc
。同时cos存储空间
在源站拉取静态资源,文件列表下多出/usr
文件。 - 其中
另一部分资源
访问CDN节点没有找到资源,也是直接回源,并且显示CDN命中失败。
第二次访问站点
一部分文件
显示来自xhhdd.cc
,一部分显示来自handsome.xhhdd.cc
- 其中来自
xhhdd.cc
的可以观察到已经被CDN所命中,而handsome.xhhdd.cc
则是来自cos对象存储的
的静态资源
12 条评论
虽然腾讯云可能会暴露原站,但是我相信没有人会浪费时间来攻击我这种小破站,按照楼主的方式部署好了,感谢!!
非常感谢 讲的很好 虽然我不知道我成功没有,但还是很感谢您
你好~感谢教程,但我根据教程配置后,显示命中了,但存储桶里没有文件哎
你是配置了资源域名是吧是不是要刷新呀 过几分钟刷新存储桶看一下 然后会不会是浏览器有缓存所以没有走cdn 强制刷新或者换个浏览器看一下
辛苦了,来加个友链OωO
很多博主都说 腾讯云容易暴露源站 所以我就放弃腾讯云用阿里云OωO
哈哈 对!我参考的那篇文章也是说容易暴露源站所以选的阿里云。害,我之前在腾讯云上充了钱,不用完不心甘。
你评论区有一点问题OωO
哭辽
确实是有问题,我前两天被打了(不知道为什么会有人打我这个小破站)
所以我就缓存了首页跟其他页面,不然服务器黑洞了,网页也打不开(流下了没有技术的泪)
刚才才想起来取消
你可以看看我博客https://blog.sicx.top/
全是阿里云cdn(就是被打可能房子就没了QAQ)
速度一般
博主如果想要追求更快的速度,应该把源站套上ECDN,而不是CDN加速。另外博主提到的根域做CNAME问题,如果域名开通了DNSSEC,则一直无法开启,咨询客服说关闭DNSSEC后需要一周时间生效再做CNAME
好嘞学习了!非常感谢!
根域名是还挺麻烦的,我就应该是没开DNSSEC,但是CNAME的时候也还是很久才转过去