CDN | 明明设置了30天缓存时间,为啥还没到30天就回源了?

CDN | 明明设置了30天缓存时间,为啥还没到30天就回源了?,第1张

突然朋友问了我个这样的问题:明明设置了30天缓存时间,为啥还没到30天就回源了?

相信很多朋友也有这种问题,首先回忆一下CDN的请求流程:

首次请求因为未命中缓存所以要到源站服务器获取资源,等CDN服务器将资源缓存在本地后,后续客户端再来请求就由CDN服务器直接给客户端了,不用再去源站。

既然都设置了30天的缓存时间,那理所应当是30天之后才会再次到源站服务器获取资源。

其实这种说法不完全正确,30天是理想最大的过期时间,不出现意外的情况下,资源在CDN服务器上是可以缓存30天的。

但是意外总是有的,比如CDN服务器坏了,里面的数据都丢了。后面CDN服务器搞好重新上线时,里面什么缓存都没有的,那你再次请求到CDN服务器是不是就会回源?

还有以下情况。

除了以上的原因还有其他的,不一一举例了。

那怎么才能避免出现上面的问题?

CDN服务器坏掉的问题,这个没啥好的办法;其他三个问题,主要解决办法是提升网站的请求量,但也不能彻底解决只能起到缓解而已。

网站每天必须有一定的请求量和流量,让资源保持热度,不然资源就有可能被淘汰掉。

一条缓存规则,该规则表示html后缀的文件会缓存5分钟。

不管访问多少次,X-Cache 始终是 MISS,X-Swift-CacheTime 也一直为 0。

X-Cache 为 MISS,X-Swift-CacheTime 为 0,CDN不缓存。

X-Cache 为 MISS,X-Swift-CacheTime 为 0,CDN不缓存。

X-Cache 为 MISS,X-Swift-CacheTime 为 0,CDN不缓存。

试下能否正常被CDN缓存。

X-Cache 变成了 HIT,X-Swift-CacheTime 变成了 300,也就是CDN缓存5分钟。

缓存规则权重不同,有两条缓存规则,其中 /static/ 目录类型的权重最大,意味着优先级最高。

请求 /static/ 目录下 html 后缀的文件,看下匹配到哪条规则?

X-Swift-CacheTime: 120,这是匹配到了 /static/ 目录类型的规则。

缓存规则权重相同, html 文件后缀名的规则创建时间最早,正常情况应该是匹配到该条规则。

X-Swift-CacheTime: 300,确实匹配到了 html 文件后缀名规则。

CDN不要设置缓存规则,然后nginx配置内容如下,Cache-Control设置为60秒,Expires设置为120秒。

源站响应头部有 Cache-Control 、 Expires 、 Last-Modified 、 ETag ,测试看看哪个优先级最高。

X-Swift-CacheTime: 60,Cache-Control 的优先级高一些。

在nginx配置中将 add_header Cache-Control "max-age=60" 去掉再试试。

X-Swift-CacheTime: 120,缓存规则是用 Expires 的时间了。

去掉nginx配置中的 expires 120s。

X-Swift-CacheTime 会随着时间变化,这是因为缓存过期了,CDN重新去源站拉取,然后重新计算缓存过期时间。

ok,最后一步,将 Last-Modified 响应头部给干掉。

只有 Etag 响应头部,不管访问几次,依旧是 X-Swift-CacheTime: 10。

将4个响应头部都干掉,看下CDN是否会缓存。

多次测试始终是 X-Cache: MISS 和 X-Swift-CacheTime: 0,这说明如果这4个响应头部都没了,CDN是不缓存的。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/43713.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-23
下一篇2023-02-23

发表评论

登录后才能评论

评论列表(0条)

    保存