解密Hostker&主机壳CDN——Squid篇

没有阅读过《解密Hostker&主机壳CDN——Nginx篇》的读者,需要看一遍我们 CDN 的流程图:cdn2
在完成 Nginx 部分之后,请求移交到 Squid 手中。

Squid 会根据这个 URL 访问的频繁程度,决定放置于我们 CDN 节点的内存还是硬盘中进行缓存,访问越频繁越有可能进入内存缓存,其次是硬盘,在硬盘塞满后,访问最少的 URL 将会被删除缓存。

我们的 Squid 默认会把全部请求转发后端确认是否更新,如果后端返回了 Expires 头或者 max-age,将会根据用户自定义的时间进行缓存。缓存期间不会到后端确认是否更新,直接 HIT 命中缓存。客户端浏览器也会根据这两个头进行缓存而不会向 CDN 发出请求,从而加快访问速度。

用户只需要在 .htaccess 写好相应规则,我们的 CDN 和客户端浏览器就能同时收到该缓存规则并依照规则执行。具体规则示例:

ExpiresActive On
ExpiresByType application/x-javascript “access plus 1 month”
ExpiresByType text/html M604800
<FilesMatch “\.(xls|ppt|doc)$”>
ExpiresDefault A9030400
</FilesMatch>

  • ExpiresActive On 表示开启缓存模块;
  • ExpiresByType [type] [rule]  其中 ExpiresByType 表示根据 MIME 类型执行缓存规则,type 表示 MIME 类型,rule 表示缓存规则;
  • ExpiresDefault [rule] 其中 ExpiresDefault 表示默认的缓存规则,rule 表示缓存规则。细分如下:
  • “access plus 1 month” 其中 access 表示从用户访问的时间(CDN 节点是根据 CDN 访问后端的时间)算起,plus 表示增加,1 month 表示 1 个月。
    同理可以使用 3 days 表示 3 天,1 hours 表示 1 小时,2 minutes 表示 2 分钟。可以连着用 “access plus 1 month 2 days 5 hours 9 minutes” 表示从用户访问后的 1 个月 2 天 5 小时 9 秒内缓存有效,无需找后端确认修改时间;
  • M604800 表示从文件的修改时间开始缓存 604800 秒(一周);
  • A9030400 是 access plus 的另一个用法,同理 M604800 可以写为 “modification plus 7 days”。

※ 多说一点 Apache 和 HTTP 相关的小知识:

  • FilesMatch 是根据文件名制定相应规则,双引号内的内容为正则表达式,上面示例是匹配文件名后缀为 xls 或者 ppt 或者 doc 的文件。关于正则表达式有兴趣的用户可以去网上寻找相关资料学习。
  • Expires 头和 max-age 可以用 PHP 的 header() 函数模拟发送,靠 .htaccess 主要是为了让静态文件得到缓存。
  • Expires 头内容缓存的过期时间,格式示例:Tue, 19 Feb 2013 15:34:21 GMT
  • max-age 位于 Cache-Control 头里面,单位是秒,比如 300 秒过期示例:Cache-Control: max-age=300

这样一来,我们就无需专门为 CDN 开发缓存控制面板,用户可以使用 .htaccess 或者 PHP 灵活控制所有的文件的 CDN 缓存规则。

至此,CDN 相关的技术大概介绍完毕,接下来是运算节点的介绍。

发表评论

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.