前言
本站使用netlify托管&搭建,虽然比之Github pages加载速度提升挺大,但还是比较久,体验不够好。于是开始使用腾讯的CDN服务,每月有10G的免费额度,PV量不多的个人小站足矣。但是一顿操作过后,发现开启CDN跟没开之前差别不大,甚至还更慢,这就很糟心了,所以我前前后后把CDN服务增删了几次。为什么会这样,问题出在哪儿呢?以下记录一下自己的踩坑过程。(本人最终选择了又拍云CDN。。。)
说明
以下过程基于静态网站即本站
官方文档的相关说明
首先看后台,发现流量命中率很低,平均只有20%多。
根据上面文字提示进入文档查看。给出如下的提示:
如何处理流量命中率偏低问题?
- 检查是否进行了缓存刷新:缓存刷新会清空节点上指定内容,短时间会出现命中率下降的情况。
- 检查源站是否上新资源:源站上新资源较多,会引起 CDN 节点回源,流量命中率会出现下降趋势。
- 检查源站是否异常:若源站出现故障,5XX或4XX较多时,也会影响流量命中率。
- 检查缓存过期策略是否配置正确:查看控制台缓存配置中“缓存过期配置”部分,缓存过期规则优先级为从上到下,从低到高,即下部的缓存策略会覆盖上部的缓存策略。
- 检查是否开启 Range 回源:查看控制台回源配置中 “Range 回源”部分,若关闭了 Range 回源,会导致回源时拉取整个大文件,而不是按照请求时分片拉取,会拉高回源流量,从而影响流量命中率。
- 检查是否开启过滤参数:查看控制台访问配置中“过滤参数”部分,若关闭了过滤参数,则按照全路径缓存,同一资源不同参数请求时,无法匹配会缓存多份,从而影响流量命中率。
一一对照,修改相关设置,嗯,又在另一个文档找到如下说明:
命中率低是什么原因呢? 命中率低可能由以下原因造成:
- 缓存配置问题,如缓存时间较短。
- Http Header 导致无法缓存,请检查源站 Cache-Control 或 Expires 的设置。
- 源站类型问题,可缓存的内容少。
- 网站访问量低,过期时间短,命中的文件少,导致频繁回源。
用户感觉 CDN 访问慢? 大文件关注下载速度,小文件关注延时。首先得到用户访问慢的 URL,通过测速网站判断是否访问慢(推荐工具: 17ce http://www.17ce.com ):
- 如果测速确实慢,而且是 FTP 托管源或 SVN 源,反馈到一线进行处理。
- 如果测速显示慢,源站属于自有源,协助用户排查源站机器负载和带宽是否受限。
如何判断用户访问是否命中 CDN Cache?
查看访问回包头部的 X-Cache-Lookup 信息:
- X-Cache-Lookup:Hit From MemCache 表示命中 CDN 节点的内存。
- X-Cache-Lookup:Hit From Disktank 表示命中 CDN 节点的磁盘。
- X-Cache-Lookup:Hit From Upstream 表示没有命中 CDN。
于是我访问网站,F12打开开发者工具,果然,X-Cache-Lookup字段基本都是Hit From Upstream。
那么接下来一一排查问题所在。
源站设置
我的代码是托管在netlify的,上面只是设置了域名,其他都是默认的(也没有相关的可设置),应当没有问题。看看代码上是不是设置了Cache-Control。果然,在_layout.html 文件下看到头信息meta有两个Cache-Control,其中有一个设置是
1 |
|
请求中的Cache-Control字段说明
字段值 | 解释 |
---|---|
public | 代表http请求返回的内容经过得任何路径当中,都可以对返回的内容进行缓存 |
private | 代表只有发送请求的浏览器才可以对返回的内容进行缓存。 |
no-cache | 每次请求都会访问服务器,即使本地有缓存 |
no-store | 本地和代理服务器都不能进行缓存存储,每次都要重新请求,拿到内容 |
no-transform | 告知服务器客户端希望获取实体数据没有被转换(如压缩)过的资源 |
嗯,删除了事,no-transform可能会有影响,因为之前在CDN中设置了智能压缩。
腾讯云CDN设置
以防万一,HTTP响应头添加如下配置,并关闭压缩,静态网页文件本身并不大。
最后再半小时以上,然后把每个页面再刷新进入几次。
然后再看响应头就发现X-Cache-Lookup字段大都是Hit From Disktank3 Gz
表示命中了,而且加载也确实快多了。
注意:为了防止不是浏览器缓存的原因,先清掉再进,多用几台设备看看,还可以使用在线工具17ce
本站配置后当天命中率
总结
从以下三方面着手,一一排除修改:
- 源码的请求头设置
- 源站相关设置
- 腾讯云CDN的设置是否有误
最后再加一点点耐心,这个需要时间的,命中率会渐渐提高,然后还跟资源的热门性有关。
遇到了问题
过了半天访问速度就会变慢,搞了半天还没找到原因,索性转到又拍云了,真香,也是免费的