我是如何优化WordPress的

先来说下博客的服务器配置把,阿里云的轻量应用服务器(学生机)。

优化wordpress 博客的速度,一句话概括,就是做缓存,上 CDN,把数据往前推。优化网页的加载速度,在服务器方面收益最大的方案就是静态化网站,减少数据库查询,另外就是做动静分离,上 CDN,减少服务器带宽压力。接下来自顶向下说下如何优化 wordpress 的速度。

我的博客访问量不大(目前几乎没有),但避免不了程序员天性对速度的要求,快,就是舒服!

男人就是要快!(大雾)

动静分离

网站架构

CDN一定要开启 https 以及 http2,TLS1.3 和 http2 将减少很多资源请求时间,还有记得使用CDN的预热,将静态资源设置成一年,否则对于一般博客的访问量,作用不会很明显。

目前我的博客是动态请求直接访问服务器(推荐经过 CDN ),图片和静态内容使用阿里云的 CDN+OSS(私有)的方式,CDN 已经配置限流。可以使用 WP Super Cache 之类的插件,配置静态文件 CDN。

安全问题

说到做动静分离,先提一个最重要的问题,安全问题。

推荐使用腾讯云,将动态请求的主域名挂到CDN上,并设置QPS限制(设置成超限404),用 CDN 隐藏服务器的 IP 地址,防止服务器直接被打,不然进黑洞就是几个小时都访问不了的事情了。不过说到 CC 攻击,就比较麻烦了,可以简单使用 nginx-lua-waf,在 oneinstack 的 lnmp 脚本中可以直接开启。

或者用 Naxsi 防火墙,亦或者开启阿里云或者百度云加速之类的 WAF(比较贵就是了)。

由于我的服务器在备案时已经将域名解析到服务器,现在关了也没用了,有查询 DNS 的解析历史的网站,所以我没把主域名挂在 CDN,挂在 CDN 也没啥用了。

防止CDN被刷流量

不限流,一夜醒来房子车子全变阿里云

一定要使用带限流功能的 CDN,比如阿里云的 CDN,或者腾讯云。

阿里云用户:

  • 方案:CDN+OSS(设置成镜像模式)
  • OS S配置成私有访问,授权 CDN 访问 OSS
  • 设置 CDN 带宽上限

这种方案即使有人刷你流量,只要到达带宽上限,CDN 就会断开,解析回 OSS,但 OSS 只允许 CDN 访问,会返回403拒绝访问。

对于腾讯云用户,直接配置QPS就可以了,超限返回404。

BUG处理

CORS跨域

如果你在动静分离后一些图标无法显示,大概率是发生了 CORS,这是因为你的字体文件的 CSS 请求了别的站点资源,需要在 CDN中 配置Access-Control-Allow-Origin,在值添加你的主站点。

站点优化

页面缓存

TPS测试
并发测试


在 WordPress 优化方面,可以优化最大的点就在于减少 PHP 生成页面时间,通过缓存数据库查询结果,和直接缓存页面优化,可以使用 WP-Rocket,WP Super Cache 之类的进行网页缓存,比如我的网站就使用了 WP-Rocket,使用前首页加载时间130ms,缓存后30ms左右

使用页面缓存后无需再启用redis之类的插件进行数据库缓存

其实最大的瓶颈是服务器的带宽,比如阿里云轻量应用服务器(5M带宽),在每个动态数据10kB的情况下,撑死了也就50左右的 TPS。

由于 WordPress 的插件市场访问429,可以使用 WP-china-yes 插件加速访问插件和主题市场,如果没有访问国外网站的途径,可以到我的网盘下载。

减少无用的http请求

  • 如果你是非 PJAX 的主题,可以使用Asset CleanUp插件调整不同页面下加载的 css 与 js 文件。
  • 页面没用用到 wordpress 自带的图标,以及 wp-embed,可以在 function 中禁止,最快的方式是用上述的插件。

压缩字体图标

一是将站点的字体突变的 font 文件压缩为 woff2 格式(不用担心浏览器支持情况)

二是如果你的站点使用了字体图标,比如 Font Awesome,一个字体文件就70kB,CSS 文件也几十 Kb,你可以使用字蜘来进行字体压缩,将没用使用到的字体删除。

评论头像CDN加速

不推荐自建 CDN,自建 CDN 仅仅是有一条更好的回源路由,对于一般博客访问量,头像缓存非常难以命中。

由于 Gravatar 头像服务器使用境外 CDN 的原因,部分区域访问很慢,可以选用镜像CDN加速,比如极客族、v2ex、七牛云的等。(测试发现 secure.gravatar.com 的速度尚可(部分区域慢),头像CDN属于可选项)

在外观->主题编辑器->function.php文件尾部追加下面代码

// Gravatar头像使用镜像服务器
function cdn_avatar($avatar)
{
    // 修改为镜像CDN地址,此处为极客族的cdn
    $gr = 'sdn.geekzu.org';
    $avatar = preg_replace("/(www|secure|\d).gravatar.com/", $gr, $avatar);
    return $avatar;
}
add_filter('get_avatar', 'cdn_avatar', 10, 3);

网站后台卡

网站后台的请求数据量在 600kb 左右,如果你的服务器带宽没有 5M,首次打开大概率打开很慢,可以通过插件 commonWP 将后台的静态文件使用 CDN 加速。

服务器优化

一把梭

使用 oneinstack 的 lnmp 脚本,安装 php 最新版本,并在 nginx 中开启 br 压缩

这个脚本帮你做了

  • 开启 http2,可以多路复用,减少文件加载时间(开了 CDN 区别不大)
  • 开启 TLS1.3(大量减少 https 握手时间)
  • 开启 brotli
  • 开启 opcache

13 条评论

发表评论

*

  • 博主,腾讯云cdn也支持访问私有存储桶了。

    • 其实各大云厂商都支持这个的,我是觉得阿里云方便点。哈哈,倒是好奇你的博客😂

  • 博主,带宽上限据你的经验,设置为多少比较合适呢?

    • 这个一般看访问量的,可以先设置为50Mbps,有时间就打开CDN的仪表盘观察下就好了,根据数据做调整。

  • 看完很受用,有个疑问,oss私有了用cdn访问超过阀值回源到oss,此时应该的无法访问的,那么网站的图片就全挂了吧?这种情况下可以做什么呢?

    • 这个没什么办法,只能等攻击者停止攻击了….或者你可以使用cloudflare的CDN。

        • cloudflare国内访问不快,也可以使用阿里云CDN的频次控制(目前在公测),或者腾讯云CDN的QPS限制

        • 百度云加速也不错的(需要将域名DNS更换到百度云加速)

    • 其实现在连CDN都没开(没啥访问量),不过对于我的访问量也够了😛

  • 同学生机 之前也是搞了好多优化 什么静态缓存 CDN啥的 现在都去掉了 访问量少所以作用不太大 (顺便反馈一个BUG 评论框下边的表情点不动 我用的火狐浏览器)

    • 我也知道访问量不大的,其实只要还是为了心里舒坦,快,就完了23333这个bug是我禁用一个组件出问题,我刚也发现了