网站建设

如何正确配置CDN高速缓存,避免越用越慢的尴尬

Jager · 10月13日 · 2015年 · · 29791次已读

越来越多的博客网站开始用到了国内的免费 CDN 了,比如百度云加速、360 网站卫士、加速乐及云盾等等。之前我也写文章分享过国内低配置 VPS 的优化方案,其中提到了很多站长开启 CDN 加速后反而更慢的问题。如何正确配置CDN高速缓存,避免越用越慢的尴尬

文章是这样描述的:

动态网页会越用越慢

很纳闷吧?但事实的确是这样!我们先要弄清楚这些 CDN 加速的原理:当用户请求我们网页时,请求会发到 CDN 节点上,如果是动态数据,那么 CDN 节点将回源站拉数据,返回给用户!也就是说数据是经过了多次转发,加上 CDN 节点和源站的延迟,肯定是效果不明显,而且更慢!

这就不难解释,总是有人抱怨百度云加速越用越慢,而有人却说很快了。区别就是,快的人开启了云加速的整站缓存,而慢的人只是弄了一个 CDN 代理转发而已。

没错,如果只是开启 CDN,而不合理的设置缓存,就会越用越慢。

下面我就分享 2 种 CDN 下的配置方案。

一、动静均缓存

这也是张戈博客之前用到的方案,网站前台不管是静态还是动态,我统统缓存到 CDN。那速度绝对可以飞起来。

老版百度云加速以及 360 网站卫士等,都可以非常简单的搞定这个事情,因为只需要直接勾上需要缓存的类型,比如一般都是让你勾选【html】 、【目录】、【首页】这 3 种类型,全部选上就可以了。

这里插播 2 条实用技巧:

①、缓存黑名单

全部选上后,整个网站不管前后台都会缓存,连后台都缓存了,那还怎么玩?所以,这些 CDN 肯定还会支持缓存黑名单,大部分是路径匹配的,比如 360 网站卫士就可以如下设置不缓存后台:

如何正确配置CDN高速缓存,避免越用越慢的尴尬

一般都是支持通配的,如果连通配都不支持,那也没必要使用了。

②、目录不缓存?

不知道有没有朋友遇到勾选了目录缓存之后,你的 WordPress 网站的分类和单页面依然不会缓存,这是为什么?

其实问题在于 WordPress 的目录和单页面地址默认是不以斜杠/结尾的,不是一个标准的目录形式。而绝大部分 CDN 定义的目录是以斜杠结尾的!

有 2 个方法来解决这个问题:

  1. 如果 CDN 存在缓存白名单,那么可以设置强制缓存(略麻烦)
  2. 让 WordPress 的分类目录和单页面以斜杠结尾即可==>详细教程

那么,问题来了。新版百度云加速已经取消了这种简单的勾选配置!很多朋友解析到云加速后就放一边了,结果速度依然蜗牛,没有感受到飞的快感。

其实,新版百度云加速需要自己自定义规则来开启缓存!下面简单分享下 WordPress 在百度云加速下开启高速缓存的自定义规则,如图点击可进入设置:

如何正确配置CDN高速缓存,避免越用越慢的尴尬

同样的,根据前面的黑白名单规则,我们先定个调,一般网站应该是这样的情况:前台都缓存、后台不缓存、个别页面要缓存或不缓存。

先看下百度云加速自定义规则的说明:

规则自定义指对“指定 URL”进行页面级规则定制(支持通配符*)。可对任意子域名、目录、甚至单个 URL 进行针对性的加速缓存、安全防护等配置。列表中上下关系决定优先级,靠上规则优先级高。站长可以通过点击“↑”调整优先级。新增规则优先级最低,将于 30s 内生效。

URL 指定支持通配符*,例如
1) 对 img.yoursite.com 进行特定设置,需增加 URL: img.yoursite.com/*
2) 对 www.yoursite.com/news/ 进行特定设置,需增加 URL: www.yoursite.com/news/*
3) 对 www.yoursite.com 所有 html 页面进行特定设置,需增加 URL: www.yoursite.com/*.html

支持通配,这就简单了!不过免费版只支持 3 条规则,这个就需要我们合理斟酌一下了。

优先级从上往下依次降低,所以我们要保证不缓存的规则写到最上面,才能不会缓存规则覆盖。

根据我个人经验,一般 WordPress 网站设置如下 3 条规则即可:

①、网站后台:zhang.ge/wp-admin/*   设置为不缓存或细致缓存

如何正确配置CDN高速缓存,避免越用越慢的尴尬

②、评论分页:zhang.ge/*/comment-page-*    设置为不缓存或细致缓存

如何正确配置CDN高速缓存,避免越用越慢的尴尬

③、网站前台:*zhang.ge*    设置为前后通配都缓存

如何正确配置CDN高速缓存,避免越用越慢的尴尬

Ps:细致缓存其实就是只缓存静态文件,其中缓存时间或有效期请自行设定即可,无需按图照办。另外由于新版百度云加速现在不能对单个域名设置了,所以最后的缓存规则是前后通配,保证某些网站的二级静态域名也缓存到位。另外,这只是我个人经验推荐的配置,比如评论分页就可以根据自己的需要设置为其他页面,此处分享仅供参考!

这样设置好了之后,网站前台刷几下就可以看到效果了,当然还可以 F12 到 network 里面去看 header 的缓存命中情况,这就不赘述了。

二、只缓存静态

动静都缓存可以解决国内低配 VPS 的 2 个尴尬:带宽和负载。带宽问题,国内普遍小水管就不用我多说了吧。负载问题则是 WordPress 一直以来的诟病,刷新快一点,CPU 就满了。

但是,有一些网站,本地已有缓存或者访问流量并不高,他们不想开启全静态缓存,因为会带来的各种数据不刷新问题。因此,我们如何既解决速度问题,又兼顾实时数据呢?

当然,开启 CDN 不进行整站缓存设置的话,大部分 CDN 会默认缓存静态文件,基本满足以上需求。但是某些 CDN 有个坑爹的规则:他会和谐某些关键词,访问有这些关键词的页面就提示违规并不显示。

如何解决这个问题?很简单,通过域名做动静分离即可。

将静态链接替换为二级域名,并开启 CDN 缓存。主域名则不走 CDN 或走 CDN 但不开启缓存。

将静态链接替换为二级域名应该不用我多说了吧?不会的看一下张戈博客之前分享的七牛 CDN 代码版即可==>传送门

主域名不走 CDN 也很简单,直接在解析时不开启缓存即可,也就是直接回源:

如何正确配置CDN高速缓存,避免越用越慢的尴尬如果担心暴露 IP,如果是阿里云 ECS,你还可以 CNAME 到阿里云的 WAF 上(这也是张戈博客目前的做法):

如何正确配置CDN高速缓存,避免越用越慢的尴尬

走 CDN 开启缓存和走 CDN 禁止缓存应该也不用我多说了,上文都有分享规则。

如上设置后,你的网站的速度也会很快,当然前提是你的动态部分不卡才行。如果网站还是比较卡,但是你有不想开启纯静态导致数据不刷新,那么

①、如果是独立主机,可以考虑开启 redis 或 opcache 等 php 动态缓存

②、如果是虚拟主机,可以安装 DB Cache Reloaded Fix 这类数据缓存插件

当然,如果你觉得还是不够快,那么推荐和张戈博客一样,开启 Nginx 的 fastcgi 缓存!

三、总结下区别

方案一 和 方案二 到底有什么区别呢?

方案一 是将动态和静态都强制缓存到 CDN,这样就算本地不开启任何缓存,用户的访问速度也是杠杠的。如果想要给搜索引擎蜘蛛一样的速度,那么本地最好也开启一下静态缓存。

方案二 则是只缓存静态数据,动态数据依然请求到源服务器。这样做的好处是既解决了带宽尴尬,又解决了前台数据不能实时刷新的问题。因为,占带宽的主要是静态文件,而非 html 代码。我们将大体积的静态文件托管到 CDN 加速,源服务器就只要负担体积很小的 html 代码流量了,速度自然就快了!

当然,这样做很容易就出现了前文提到的开启 CDN 反问变慢的尴尬。。。解决办法也很简单,本地开启一下动态缓存即可。

张戈在帮不少站长做网站优化时,设置过百度云加速,发现大部分站长都不会设置,然后还对我说为啥你弄过之后就飞起来了,我当初使用云加速就卡出翔?其实就是不会设置而已!所以,今天我分享出来,弱弱的为 CDN 正名,那些用过之后骂 CDN 垃圾越用越慢的人,先自己好好反省一下吧!

好了,本文罗里吧嗦说了一大堆,有需求的自然会豁然开朗,没需求的就会如同嚼蜡了。我敢说,如果你看懂了这些设置技巧,那么使用任何 CDN 都会信手拈来,轻松应付!

总之一句话,张戈写文章的期望不高,希望对有需求的人有所帮助就好。

83 条回应
  1. 母婴B2B 2016-11-28 · 13:58

    感谢博主的分享!

  2. 火端网络 2016-11-29 · 23:46

    虽然我用不着,但此文确实值得推荐。我很多客户就是开启了百度云加速却很慢,很多人都不会用

  3. 28客栈 2016-12-2 · 20:25

    刚换了百度云的cdn,就看到这个,太好了

  4. i2120 2016-12-13 · 21:40

    一打字就震动 感觉好害怕,不过还是感谢老大的细节教程,按图片上那样设置了。

    另外你的博客经常加载CSS失败,看来腾讯云不太行呀。

    • avatar
      Jager 2016-12-14 · 17:06

      是360CDN不行,现在应该好了。

  5. 小萝博客 2017-1-13 · 8:56

    在次来拜读这篇文章

  6. 阿乞 2017-5-1 · 22:09

    我现在用的是七牛CDN,加的是静态的,其实到现在我还有点搞不懂怎么设置,阿里云的CDN想用吧,都不知从何去设置。对了,wordpress原本的评论提交的时候是好慢的,有个朋友介绍说你这里有相关的优化文章,就是没找着,求指教。哈

  7. 久光 2017-5-30 · 18:59

    前两天开了360网站卫士,因为免费就能把ssl证书部署到所有节点感觉很厉害。
    然而。。。经过使用发现使用360网站卫士缓存的图片,速度远远慢于七牛。。。(我用的主题图片展示的较多)

    只能改造主题代码,把引用图片的位置统统换成七牛的。。。

  8. Larry 2017-6-16 · 19:15

    感谢分享, :smile:
    百度云加速配置感觉稍微麻烦些...

  9. 阿乞 2017-7-19 · 9:40

    感谢分享

  10. lodisy 2017-8-21 · 6:11

    可惜都得备案啊 服务器在香港

  11. 云同学 2017-8-26 · 22:27

    Jager你好,我网站用的是加速乐,看了你这篇文章我还是不会然后去问加速乐的那个客服他说花钱买的态度太不好了,你能不能看下我网站帮我出一个加速方案?感谢! :???:

  12. 历史趣谈 2017-11-15 · 6:53

    文章讲解的很详细,很有实用价值

  13. 黑色网魂 2017-12-7 · 14:20

    怪不得我用起来很慢,原来是设置有问题的

  14. 我的 2018-4-11 · 10:59

    我的用腾讯云cdn,评论无法实时刷新该怎么办,不能用通配符设置缓存

  15. 网站建设 2018-5-2 · 10:51

    感谢分享,解决了一大问题

  16. 阿南SEO 2019-2-20 · 18:09

    发现百度云CDN的节点有些不稳定,很多地区打开网站会出现样式错乱

  17. 阿南SEO 2019-2-21 · 18:04

    很尴尬,百度云加速免费版的不支持HTTPS

  18. 自然 2019-6-4 · 20:44

    感谢张哥的规则,如果可以再出一些精细化的规则就更好了

  19. 范明明 2019-9-23 · 16:39

    静态缓存60天了,感觉访问速度不存在问题。但是遇到小流量CC还是巨慢。只怪自己穷,小水管永远都是小水管啊。

    • avatar
      Jager 2019-9-25 · 19:43

      慢速CC没办法。。。手工ban吧

  20. 简单生活 2019-12-27 · 10:48

    来问问张戈大佬,百度云加速新版4条规则怎么写才最好利用...

    目前第二条是占位的,其他三条跟你说的一样...