CDN的全称是Content Delivery Network,即内容分发网络。CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。——节选自百度百科

一、拯救屌丝服务器

网站CDN搭建方法和缓存策略分享-极客飞船

前段时间看了一篇关于国内视频直播市场的分析文章,里面讲到:目前市场上带宽平均价格是,1GB 15万到 30万不等,1GB 的带宽基本上能够支撑 5 万到 10 万人的移动直播用户数并发。根据 YY 披露的财报,2015年4季度带宽费用支出约为 1.6 亿,而熊猫TV 每年带宽费用大概在 5-7 亿。

我在选云服务器那会儿也对服务器居高不下的带宽成本感到惊讶,拖动服务器带宽的进度条,1Mbps 到 2Mbps 也许只相差 20元/月,但随着带宽基数的增加,单价也呈阶梯递增。当你想象着家用带宽的资费然后拖到 100Mbps,费用已来到了近万元每月。

极客飞船用的就是最低配置 24K 黄金屌丝服务器,这样也要68元/月。那么,理论单用户下载满速率 128KB/s 的网站带宽,假设按照上面的数据,截止本文发布时间,加载大小约为 1.26MB 的极客飞船首页都需要 10 秒时间,更别谈并发了。

而实际情况是极客飞船首页一般能够在 1-3 秒内加载完成(我没有禁用 Gravatar 头像国内服务,禁用了会稳定在 2 秒内),用什么手段办到的?没错,CDN 。

二、CDN 的选择

带宽虽然金贵,但庆幸国内市场上还有大批的免费 CDN 可选,百度云加速、加速乐、360网站安全卫士、七牛云等,无论服务商出于什么动机免费,情怀也好,获取大数据也好,提高付费转化率也好,对于个人站长而言绝对是福利。上面4个都是我观察到站长们多在使用的,极客飞船目前用的是云端网络的 VeryCloud。

差别大吗?我选了几个重要的参数对比了一番:

网站CDN搭建方法和缓存策略分享-极客飞船

流量、节点数、自定义缓存策略数,任何一个少了都会感到捉襟见肘,而是否启用全站 Https 直接决定了网站的气质和云存储的成本。极客飞船之所以选择 VeryCloud 的原因之一就是只有它和360网站卫士免费支持 Https 加密链接。

博主曾经花费过大把的时间在搭建全站 Https 上,一切具备只欠东风仅仅因为没有找到低成本高效能的图床而暂时搁置,但是如果我想是随时可以启用的,网址前有把小绿锁是很让人舒心的事。

是的,我在这里“明目张胆”地安利 VeryCloud 了,这个在站长圈并不流行甚至可谓低存在感的服务商,云端网络没有给我一毛钱,而事实是,上面 5 个产品我全部用过了,作为一个站长亦是互联网从业者首先得感谢这些免费提供 CDN 服务的企业,良心!其中个别产品在我没提到的带宽速率、缓存命中率、稳定性上甚至有明显优势。但是,如果可以的话请其余 4 个产品的 PM 好好学一学这个“小弟”的产品UE,VeryCloud 的导航栏常驻,布局合理;功能分类精确,入口便捷;全局配置表格呈现,一目了然;缓存策略、黑白名单、缓存类型、缓存目录同页操作,自由拖动;缓存刷新、预取自定义,可区别提交。你们那些既不中看又不中用的“极简美学”让人用起来实在心塞,我不是针对谁。

三、配置过程

国内的 CDN 一般都要求网站已完成备案,但无论国外国内,在配置流程上都是相似的,这里以 VeryCloud 的界面为例:

  1. 注册账号,进控制面板,找到「云分发」→「频道管理」,右边界面点「新建」;
  2. 看图,②和③步可以先不设置;
    网站CDN搭建方法和缓存策略分享-极客飞船
  3. 完了等工作人员审核,一般 10 分钟左右,必须保持网站可以访问,不然审核会被拒绝;
  4. 审核通过后,鼠标指向频道名字,复制下 CNAME 值;
    网站CDN搭建方法和缓存策略分享-极客飞船
  5. 去你域名服务商的控制面板,删除原本指向源站的 A 记录类型;
  6. 添加新的解析,比如在阿里云(万网),将域名 CNAME 到刚才 CDN 提供给你的值,保存;
    网站CDN搭建方法和缓存策略分享-极客飞船
  7. 片刻之后 CDN 就会按照你在第②步设置的缓存策略,从源站拉取文件到全网节点。

这里说一下「主域名」这个概念,我们通常会看到有带 www 和不带 www(即@主机记录) 的两种网址,百度上有很多教程会叫你把 www 和 @ 都 A 记录指向源站 IP,这是一个坑。这样做虽然让 www 和 不带 www 的网址都访问到网站了,但搜索引擎会将权重分散给两个网址,还会产生两种前缀的搜录结果,所以我们需要尽早决定使用哪一个作为「主域名」,而让另一个在访问时跳转过去。

具体操作可以回头再看:配合CDN进行301跳转完美隐藏源站IP

这是一个非常重要不可省略同时涉及 SEO 和安全的操作。

四、缓存策略设置

一句话说:缓存策略决定了 CDN 缓存什么和不缓存什么。

既然是「缓存」就存在时间问题,有些文件是长期不变的,比如已经配置好的插件和主题。

回到 CDN 的控制面板,点击你的频道名(网址)进入详细设置界面,VeryCloud 这一点做得很好:在上面的策略权重优先。

例如 /wp-content/plugins 你只想缓存这个 plugins 文件夹里的内容,但除此之外 /wp-content 路径下的其他任何文件都不缓存,那么就可以将「不缓存 /wp-content/」的策略放在「缓存 /wp-content/plugins/」策略之下。


网站CDN搭建方法和缓存策略分享-极客飞船

一个演示策略,「缓存后缀」即文件类型,借以解说自己的逻辑,高手多指正。

/wp-admin/,不缓存,该目录有大量涉及用户权限的文件;
/wp-includes/,30 天,Wordpress 的基础目录,有大量 PHP 文件,也有 JS、CSS 等,变动频率低,时间长些;
/wp-content/themes/,30 天,Wordpress 的主题目录,变动频率低,时间长些;
/wp-content/cache,1 天,Wordpress 的本地缓存目录,更新不及时可能导致某些内容延迟显示;
/wp-content/plugins/,30 天,Wordpress 的插件目录,变动频率低,时间长些;
/wp-content/uploads/,1 天,Wordpress 的图片默认上传路径,视图片主要来源而定;
/wp-content/languages/,30 天,Wordpress 的语言包目录,变动频率低,时间长些。

实际操作时,本地文件的情况可能更复杂,这也是自定义缓存策略的作用所在:防止 CDN 缓存不该缓存的敏感文件。

五、最后一点 Tips

参数过滤,CDN 中常见的设置项,开启后会忽略请求中 ? 之后的参数。

比如,你将一张原始分辨率为 1920*1080 的图片输出为 1366*768 分辨率,输出后的 URL 请求结构为 http://网址/原始路径?处理参数那么开启「参数过滤」CDN 缓存的将是 1920*1080 的原始图片。

天下没有免费又十全十美的午餐,就拿七牛云这个典型来说,极大比例的站长都用七牛云作图床,可是七牛云一个月只给你 10GB的国内流量,PUT 和 GET 的请求次数也做了限制,怎么缩小请求次数、怎么优化图片这个流量大户、遭遇了恶意刷流量怎么办……作为网站的主人,要思考的问题还有很多,共勉。