结合工作实践说说CDN

优点

(1)缓存资源
(2)将静态资源托管到CDN可以使访问资源加速
(3)源网站负载减轻,所以受 DDOS 攻击的可能性较小

原理

CDN服务器 = 缓存 + DNS负载均衡
第一次访问资源后,源站数据会缓存在 CDN 服务器,下一次用户需要访问该节点的时候,直接在 CDN 的缓存节点中找到该数据
第一次访问资源之前,把热门数据先存到 CDN 上,这叫“资源预热”,防止第一次访问源站要一次性承受大量的请求,否则源站很有可能会挂掉

使用技巧
(1)缓存设置

使用 max-age 进行缓存设置,默认设置的是代理服务器的缓存时间和本地缓存时间。如果我们不希望 CDN 服务器缓存时间过久,可以使用 s-maxage 进行设置,将会覆盖掉 max-age。这样可以有效避免脏数据的产生

(2)缓存命中率控制

如果你托管到 CDN 上的静态资源是经常发生变化的,那就不要托管到 CDN 上边了

(3)x-cache-lookup

值里包含 hit, upstream 则没有命中

(4)md5 签名

请问:这是什么鬼,我们项目中总会用到,但是目前还搞不懂这是啥

-------------------------------谢谢ezmo大神给出的答案--------------------------------

md5 是用来干啥用的

就是版本号,刷新缓存用的
有的是防止恶意回源的,和CDN那边达成协议,每次请求CDN会携带某些信息MD5加密后回源。这样黑客即便嗅探到源IP,直接解析过去,也是不能正常用的。(又拍云的有这功能,可以去了解下~)
有的是验证请求链接是不是被改了。
有的纯刷存在感
大多数是用来标识缓存的

阅读 1.8k
1 个回答

你的问题之前有人回答过的, 戳此,简而言之,一般是为了防止cdn的链接地址被人手工构造,从而减轻cdn被人恶意创建缓存的几率。

P.S.

cdn服务器自己构造的地址一般是 url+自己的密钥,然后md5加密一下放在url中一起返回,形如 https://cdn.some.com/test111.png?v=234242342&md5=d63d0b4fabf9e99002d0e0641c4ddfce
这个密钥对外是保密的,
用于cdn服务端接收到请求验证url的合法性时使用,即取出url中的https://cdn.some.com/test111.png?v=234242342 + 密钥字符串,一起用md5加密后,看看是不是等于url中的md5签名,相等则证明这个url请求是合法的,否则认为是客户端自己编造的。