美文网首页
阿里云CDN命中不到的问题

阿里云CDN命中不到的问题

作者: squidbrother | 来源:发表于2020-02-22 23:42 被阅读0次
    怎么判断出现回源了(未命中的情况)

    命中低的表现:
    请求加速域名下对应的资源,通过浏览器工具查看network可见

    response Headers 中 查看 X-Cache 
    出现 MISS 说明未命中
    出现 HIT TCP_MEM_HIT 说明命中了,另外 通过Age 可查看该资源在当前cdn节点已缓存了多久
    
    在CDN阶段创建缓存成功后,若出现了回源,如何排查

    1.大部分为动态内容
    2.URL带参数,每次请求参数变化
    3.文件源站设置了 cache-control:np-cache 或者 private 或者 max-age=0

    针对上述情况,express静态文件托管最容易发生

    因为express静态托管的语法格式为:
    express.static(root, [options])
    root 参数指的是静态资源文件所在的根目录。
    options 对象是可选的,支持以下属性:
    其中,options参数中 maxAge Default为0
    如果没写options这一块非必选参数,那么会直接导致 CDN配置成功且添加预热情况下,命中不到,引起回源。

    express静态托管的官方API地址

    例如:

    app.use(express.static('public', {
        maxAge:xxxx
    }))
    

    其中 maxAge值的单位可以是毫秒数字,也可以是ms格式的字符串
    具体格式如下

    格式 意思(单位毫秒)
    ms('2 days') 172800000
    ms('1d') 86400000
    ms('10h') 36000000
    ms('2.5 hrs') 9000000
    ms('2h') 7200000
    ms('1m') 60000
    ms('5s') 5000
    ms('1y') 31557600000
    ms('100') 100
    ms('-3 days') -259200000
    ms('-1h') -3600000
    ms('-200') -200
    ms(60000) "1m"
    ms(2 * 60000) "2m"
    ms(-3 * 60000) "-3m"
    ms(ms('10 hours')) "10h"

    修改完express配置,pm2重启服务器,命中啦~!


    缓存成功
    命中缓存
    针对CDN存在缓存策略,服务器也存在缓存策略,浏览器同样存在缓存策略,它们处理缓存的优先级是怎么样的呢?

    初次请求,查看CDN服务器,没有缓存,则去源服务器请求数据,服务器返回数据到CDN,同步到浏览器
    浏览器在过期时间内访问 CDN服务器查看其 源服务器设置缓存时间,
    没有到,则返回CDN服务器数据
    如果到期了,则去源服务器请求数据

    Cache-Control 属性与意义

    Cache-Control 有几种属性:

    private:表示它只应该存在本地缓存
    public:表示它既可以存在共享缓存,也可以被存在本地缓存
    no-cache:表示不论是本地缓存还是共享缓存,在使用它以前必须用缓存里的值来重新验证
    no-store:表示不允许被缓存。
    max-age=:设置缓存时间,设置单位为秒。本地缓存和共享缓存都可以
    s-maxage=:覆盖 max-age 属性。只在共享缓存中起作用。
    immutable:表示文档是不能更改的。
    must-revalidate:表示客户端(浏览器)必须检查代理服务器上是否存在,即使它已经本地缓存了也要检查。
    proxy-revalidata:表示共享缓存(CDN)必须要检查源是否存在,即使已经有缓存。
    

    服务器缓存与CDN缓存

    Cache-Control: public max-age=3600 //本地缓存和 CDN 缓存均缓存 1 小时;
    Cache-Control: private immutable   //不能缓存在 CDN,只能缓存在本地。并且一旦被缓存了,则不能被更新;
    Cache-Control: no-cache //不能缓存。如果一定要缓存的话,确保对其进行了二次验证;
    Cache-Control: public max-age=3600 s-maxage=7200  //本地缓存 1 小时,CDN 上缓存 2 小时;
    Cache-Control: public max-age=3600 proxy-revalidate   //本地和 CDN 均缓存 1 小时。但是如果 CDN 收到请求,则尽管已经缓存了 1 小时,还是要检查源中文档是否已经被改变。
    
    最后记得预热你的资源到节点

    手动访问加速域名,只是推送数据到离你最近的节点,而不是所有的节点,所以阿里云CDN还是需要预热或刷新同步资源。

    相关文章

      网友评论

          本文标题:阿里云CDN命中不到的问题

          本文链接:https://www.haomeiwen.com/subject/enzrqhtx.html