相信很多朋友也有这种问题,首先回忆一下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是不缓存的。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)