经验分享:我是如何对wordpress博客加速的?

WordPress博客的加速可以说是老生常谈了,在这里我分享一下我博客的分享技术。 我采用的加速技术主要是wordpress的缓存插件,动静分离和腾讯云CDN。

1.我安装的wordpress缓存插件

Autoptimize

这个插件整合并压缩 CSS 和 JavaScript 代码,可以节约CSS和JS的加载时间。我的配置如下:

  • 优化HTML,JS,CSS
  • Aggregate JS-files?
  • 在 <head> 强制 JavaScript?
  • 设置JS和CSS排除为wp-content/cache/, wp-content/uploads/
  • 生成数据: 图片URI
  • 内联所有 CSS?
  • Aggregate CSS-files?
  • 也聚合内联 CSS?
  • 保存为静态文件
  • 优化登陆用户
  • 同时移除emojis
  • 删除静态文件中的查询字符串

Self-Hosted Google Fonts

这个服务用于加载谷歌字体到本地服务器,可以避免一些字体加载不出来字体变丑的情况。但是如果你的服务器在国内,推荐用Autoptimize禁用掉谷歌字体。

这个插件会影响谷歌AMP的支持

WP Acceleration for China

如果你的服务器在国内,可以通过这个插件更改谷歌字体和 Gravatar头像的镜像地址,加快wordpress打开速度。

WP OPcache

这个插件可以通过Wordpress管理Zend OPcache缓存的支持,更新wordpress版本后可以清理缓存。

WP Super Cache

这个是Wordpress官方推荐的静态缓存插件。比较消耗资源(当初在万网的虚拟主机启用这个插件,就因为负载太大暂停了我的服务),但是效果还是很明显,推荐安装。 我的配置如下:(启用了Nginx的专家模式,需要配置伪静态)

  • 不要为已知用户缓存。 (推荐)
  • 不要为 GET 请求缓存。(地址结尾为?x=y)
  • 压缩页面以便让来访者更快浏览。(推荐)
  • 缓存包含页面内容的 HTTP 头(headers)文件
  • 缓存重建。当新缓存生成时调用缓存文件给匿名用户。(推荐)

备注:如果采用PHP缓存模式,可以勾选: 304未修改浏览器缓存。表示网页自从它最后一次请求后未被修改。 (推荐)

  • 当有新文章或页面的发布或更新时清除之前的缓存文件。
  • 首页额外检查。 (极少数情况下会停止对首页的缓存) (推荐)
  • 当某页面有新评论时,只刷新该页面的缓存。

在服务器负载能力较大的服务器上面,还推荐打开预缓存模式。

本站固定链接:/archives/%post_id%.htm

在支持对象缓存的服务器上,安装对应的对象缓存插件后,可以打开WP Super Cache的对象缓存模式。本站采用Redis对象缓存。

2.wordpress动静分离

从本部分开始,建立在域名已经备案的基础上。

wordpress动静分离我用的是七牛对象存储,腾讯云CDN,WP Super Cache。

备注:为什么要用两家的东西呢?因为我的博客已经启用了全站HTTPS。七牛的融合CDN没有给HTTPS的免费额度,另外,腾讯的对象存储也有一定的免费额度,却不支持HTTPS回源。 因此,如果你的网站还没启用HTTP,可以直接使用腾讯的对象存储或者七牛的融合CDN。

1)首先建立一个公开七牛的对象存储,设置好对象存储的镜像存储到博客的域名。这样对象存储内缺少的文件可以自动从原站获取,这种方法也保证了数据的两处备份,避免了只将文件上传到七牛,本地服务器没有备份的尴尬。

2)绑定融合CDN加速域名。七牛默认的测试域名只用三十天的有效期,如果你想启用长期有效的自定义域名,那么必须用七牛的融合CDN。绑定该域名并做好解析(不需要配置HTTPS),缓存文件的有效期我设置了30天。这时候用的域名记为域名A。

3)启用腾讯CDN。腾讯CDN提供了HTTPS免费额度,因此利用腾讯云CDN对七牛CDN进行二次加速。腾讯CDN的域名记为B,回源域名为域名A,回源HOST也为域名A。 腾讯云CDN配置如下:


  • 缓存内容all,时间100天
  • 开启防盗链配置(详细配置参考第三部分)
  • 过滤参数/视频拖拽
  • IP访问限制频率(详细说明参考第三部分)

4)设置WP SUPER CACHE,在CDN标签页中输入域名B即可,保存后生效。

Autoptimize插件也应该对应设置CDN,另外推荐在 Autoptimize中 开启预先连接到第三方域(高级用户),写入静态域名。

3.腾讯云CDN配置

第二部分介绍的腾讯云CDN配置有些简略,在这里详细介绍。腾讯云人称良心云,其CDN服务给新手6个月的50G流量包,之后每个月仍然赠送10G流量包,对于个人网站完全是足够用了,支持HTTPS,节点数量较多,加速想过非常明显。

本篇文章主要是想分享一下腾讯云CDN的配置,重点是wordpress防盗链,缓存配置,回源配置。顺便说一下腾讯云CDN经常会造成wordpress后台564错误的原因。

基础配置同第二部分的腾讯云CDN配置,详细配置如下:

1.防盗链配置

本博客采用了白名单防盗链,开启了空referer保证浏览器直接访问的正确性。白名单除了本站自己域名外,还应该有搜索引擎的存在,保证搜索引擎的正常索引。

  • *.baidu.com
  • *.baiducontent.com
  • *.bing.com
  • *.google.com
  • *.qhimg.com
  • *.qq.com
  • *.qzone.qq.com
  • *.sina.com
  • *.sinajs.cn
  • *.so.com
  • *.sogou.com
  • *.sogoucdn.com
  • *.soso.com
  • *.toutiao.com
  • *.weibo.com
  • *.yidianzixun.com
  • cn.bing.com
  • img.t.sinajs.cn
  • liuxiangling.com
  • mail.qq.com
  • mp.qq.com
  • mp.toutiao.com
  • mp.yidianzixun.com
  • openmail.qq.com
  • s.share.baidu.com
  • service.weibo.com
  • www.baidu.com
  • www.chinaso.com
  • www.google.com
  • www.so.com
  • www.sogou.com
  • www.toutiao.com
  • *.zhangxuhu.com
  • zhangxuhu.com

请注意,将 *.zhangxuhu.com和zhangxuhu.com换成自己的域名。另外 *.zhangxuhu.com中的通配符并不能代表 zhangxuhu.com,包括HTTPS的泛域名证书也是这个道理。
别问我为什么,我也不知道。

如果有友情链接连接到本站,请将该网址加入上面白名单中。或者,请干脆对主站不开启防盗链,仅仅对静态资源站开启防盗链。

2.IP访问限频配置

注意:这个限制只是单个CDN节点的限制,并不是CDN的总限制。

3.缓存配置

类型 内容 刷新时间
全部all 0天
文件类型 .jpg;.png;.gif;.ico 300天
文件类型.woff2;.otf;.ot;.svg;.ttf;.woff365天
文件类型.xml;.gz;.php0天
文件类型.css;.js300天
文件类型/wp-admin0天
  • 不缓存/wp-admin和php文件可以防止造成许多奇怪的问题。
  • 缓存css,js,png等文件是为了防止动静分离时有漏网之鱼,不知道有没有用
  • .woff2;.otf;.ot;.svg;.ttf;.woff是wordpress的字体文件,也应该缓存。
  • 不缓存html文件和首页是我发现这样好像对我的博客访问速度有副作用,不知道为什么。

4.回源配置

对wordpress启用腾讯云CDN会造成许多后台HTTP 564错误,上网搜索发现,好多网友说中间源配置,Range回源,回源跟随301会造成这个问题,经过我个人的体验和发工单请教腾讯云工程师,其实564错误和这个是没有关系的。


腾讯云工程师:564是由于源站响应时间高于cdn的默认超时时间10s导致的

因此,这三个选项和564错误还是没有关系的。那么564错误到底怎么解决呢?

从工程师的回复可以看到,即使不套腾讯云CDN,wordpress的后台响应也是很慢的,甚至可能打不开。不考虑了服务器性能过低的因素,建议排查插件,一些代码质量不好的插件会严重影响后台的加载速度。我曾经发生564错误就是因为某个插件的原因,登陆服务器后删除掉这个插件的文件夹就行了。

怎么排查是不是插件的因素呢?将/wp-contents/pulgins改名,如果可以打开后台说明是插件的问题,按个插件排查即可。如果不是插件的原因,那么就该排查服务器的负载了。不过我还是要说,凭什么腾讯云只等待10S,哈哈哈。

更新:中间源和301回源跟随选项可能导致wordpress无法登陆,关掉即可恢复,敬请周知。

以上就是我本人对wordpress的加速的经验,里面可能有一些不对或者不通用的地方,还望大家批评指正。也欢迎大家有什么好的加速技巧共同分享。

为您推荐

发表评论

电子邮件地址不会被公开。