CDN命中率低的原因以及解决方法

作者: Arvin Chen 分类: 互联网 来源: Break易站(www.breakyizhan.com)

CDN命中率低的原因以及解决方法

我们知道,CDN命中率会造成回源流量非常大,从而造成了CDN的效果非常不好,那么造成CDN命中率低的原因有哪些呢?更加阿里官方的说法,原因有以下几个方面:

  1. 源站上缓存header设置不当,或者缺少必要的header,则根据CDN的缓存规则是不缓存的,那么自然每次访问都会MISS,影响命中率。这一点要通过检查源站,在CDN上设置是没有用的。
    • 缓存header设置不当主要是cache-control或者pragma的影响,即源站上设置了cache-control:no-cache/no-store/max-age=0/private或者Pragma:no-cache等均会被CDN当做最高优先级执行不缓存。
    • 缺少必要的header,则是指源站的response头中不包含etaglast-modified也会导致不缓存,具体哪几种情况会导致不缓存。
  2. 控制台设置了不缓存的规则(比如某目录或者某种后缀的文件设置缓存时间为0秒),查询方法可以在CDN控制台查看。解决方案:CDN命中率低的解决方法之缓存规则设置
  3. 源站动态内容居多,目前CDN主要是加速静态资源(css、js、html、图片、txt、视频等),针对动态资源(php、jsp、包含内部逻辑处理甚至cookie等)基本都是回源。
  4. CDN的访问URL中带有可变参数(举例:http://dccdn.pier39.cn/1.txt?timestamp=14378923](http://dccdn.pier39.cn/1.txt?timestamp=14378923,其中timestamp表示时间戳,每次访问均会不同)。这里CDN针对第一次访问的URL(之前未预热),无论该URL是否符合CDN的缓存规则,第一次访问肯定都是MISS的(因为节点上还没有这个文件),因为后面的参数可变,所以每次访问都是一个全新的URL,则每次都会MISS,从而影响命中率。
  5. 刷新操作频繁,有定时刷新的操作,每次刷新都会导致所有已经在CDN上缓存的URL失效,那么下次访问同样的URL,自然就会MISS,从而影响命中率。
  6. 文件热度不够,不经常被客户访问到,导致虽然符合上面的所有规则,但是经常有被节点下掉缓存。CDN节点上缓存的文件,可以理解为按照热度属性采取末尾淘汰制,所谓热度就是该文件在该节点上被访问的频率,文件热度不够,其实一定程度上跟这个域名本身的流量不高有关联关系(排查点2)。
  7. 网站是刚刚上CDN的,缓存时间不够,从而导致前期的命中率很低,这个原因是过段时间就会好的。
  •   本文标题:CDN命中率低的原因以及解决方法 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/ittalk/4021.html

    "CDN命中率低的原因以及解决方法"的笔记

    • 另外,可以看一下阿里云官方的解答,以及解决方案,该方案可以应用在任何云上。
      [ 问题现象 ]
      我的CDN 30天的平均命中率很低,是25%左右,能帮我看看是什么原因么,CDN的配置已经截图
      [ 问题实例 ]
      http://47.106.37.15
      [ 处理意见 ]
      您好,cdn命中率低一般是回源流量比较大,用户访问没有命中缓存导致的,我查看您这个回源流量太大了,正常的应该是回源流量很低,建议您把cdn日志下载下来,
      https://help.aliyun.com/document_detail/27142.html?spm=a2c4g.11186623.6.616.fg2SUv
      查看一下用户访问的那些url是miss的情况,然后您在访问一下看是否也是miss回源拉取数据的,这个链接中有检查方式,您查看一下
      https://help.aliyun.com/knowledge_detail/63874.html?spm=5176.11065259.1996646101.searchclickresult.102a4a9cmHGoCe

      Arvin Chen 2018年6月21日 下午4:41
    • 还有两个办法提高CDN的命中率:
      1. 不要经常刷新,刷新或者网站的大更新都会造成CDN命中率低。比如用了wp fastest cache的话,不要经常删除cache,会降低CDN的命中率。
      2.使用CDN的预热功能也能提高CDN的命中率

      Arvin Chen 2018年8月20日 下午7:58
    • 参照下面配置HTTP头,可以提高CDN的命中率:

      accept-ranges: bytes
      access-control-allow-origin: *
      Access-Control-Allow-Methods:POST, GET, OPTIONS
      access-control-max-age: 2592000
      cache-control: max-age=2592000
      

      max-age的单位时间是秒,意思是资源存储在浏览器的时间~~

      Arvin Chen 2018年9月2日 上午12:19
    • vary: User-Agent也会影响CDN命中率

      User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的UA来判断的。
      而这个不是做全局缓存,所以会影响CDN,怎么修改呢?
      在htaccess中修改vary:

      <ifModule mod_headers.c>
      Header unset Vary
      Header set Vary "Accept-Encoding"
      </ifModule>

      如果是wordpress可在functions.php中加上:

      function replace_wp_headers($headers) {
      $headers['Vary'] = 'Accept-Encoding';
      return $headers;
      }
      add_filter('wp_headers', replace_wp_headers);
      Arvin Chen 2018年11月14日 上午9:39
      微信返利机器人
      免费:淘宝,京东,拼多多优惠券
      腾讯,爱奇艺,优酷的VIP视频免费解析,免费看
      即刻扫描二维码,添加微信机器人!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注