使用阿里云的CDN,发现命中率一直不高,会受到很多回源请求。
通过几下几点可以解决阿里云 CDN命中率问题。
1.资源的header文件头设置
源站上资源的header设置不当,或者是缺少必要的header,这种情况根据阿里云CDN的缓存规则是不缓存的,这样自然就会导致每次访问都会出现MISS,影响命中率。
缓存header设置不当主要是cache-control或者pragma的影响,即源站上设置了cache-control:no-cache/no-store/max-age=0/private或者Pragma:no-cache等均会被CDN当做最高优先级执行不缓存。
缺少必要的header,则是指源站的response头中不包含etag和last-modified也会导致不缓存,具体哪几种情况会导致不缓存。
2.控制台设置了不缓存的规则
比如在阿里云控制台设置了某目录或者某种后缀的文件缓存时间为0秒,查询方法可以在CDN控制台查看。
3.CDN缓存的主要是静态资源
源站上动态内容居多,现目前阿里云CND主要加速静态资源(css、js、html、图片、txt、视频等)。
4.请求Url中带动态参数
CDN的访问URL中带有可变参数,无论该URL是否符合CDN的缓存规则,因为后面的参数可变,所以每次访问都是一个全新的URL,则每次都会MISS,从而影响命中率。
5.CDN刷新操作频繁
进行刷新操作频繁,有定时刷新操作,每一次刷新之后就会导致所有已经在CDN上缓存的URL实效,这样下一次访问同样的URL,自然就会MISS,这就造成命中率下降。
6.资源文件热度不够
文件的热度不够,不是那种经常被客户访问到,导致虽然符合上面的所有规则,但是经常有被节点删除缓存的可能。CDN节点上缓存的文件,可以理解为按照热度属性采取末尾淘汰制,这其中访问热度就是文件在这个节点上被访问的频率,文件热度在一定程度上就是域名本身的流量不高造成的。