前言
WordPress 是很流行的博客程序,很多站长使用它构建自己的站点。然而,如果不进行优化,WordPress 的打开速度和并发能力会很差。本文汇总了常见的 WordPress 优化方法。下图是优化后的站点测速图(使用了 CLOUDFLARE):

教程
PHP
- 设置你的 PHP 版本为 8.3。经测试,WordPress 运行在 PHP 8.3 性能最好。1
- 安装 PHP 扩展
opcache。
WordPress
- 安装插件
WP Super Cache。这个插件大多数站点都在使用,而且效果确实不错。 - 安装插件
Redis Object Cache。这个插件需要你的服务器安装 Redis 后才可以使用。 - 安装插件
Nginx Helper。这个插件需要配合 Nginx 的模块一起使用,详细教程在后文。 - 安装插件
WPJAM BASIC。这个插件可以屏蔽所有 WordPress 不常用的功能。
Nginx
- 使用模块
ngx_cache_purge。
如果你是宝塔用户,那么恭喜你,宝塔在安装 Nginx 时安装了该模块。具体可以通过以下命令查看安装情况:
nginx -V 2>&1 | grep -o ngx_cache_purge
````
如果正常输出了 `ngx_cache_purge`,说明你的 Nginx 已经安装了该模块。
接下来,我们需要创建缓存文件夹:
将 paolu_host 替换为你的域名
mkdir -p /tmp/nginx-cache/paolu_host
chmod 755 /tmp/nginx-cache/paolu_host
如果你有多个域名,同上
创建缓存文件夹后,在 Nginx 配置文件的 `server` 块前加入以下代码:
将 paolu_host 和 paolu.host 改为你的域名
levels 不需要改动,它指定该缓存空间有两层 hash 目录
keys_zone 来给缓存空间命名,一般使用域名,冒号后指定缓存空间的大小
inactive 是缓存时间
max_size 定义缓存空间的最大值
fastcgi_cache_path /tmp/nginx-cache/paolu_host levels=1:2 keys_zone=paolu.host:100m inactive=1d max_size=5G;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
宝塔用户可以参考下图配置:

接下来,在网站的配置文件处添加如下配置:
> 注意:
>
> * sock 路径需要修改,如果填错会导致网站 502。
> * 缓存清理配置中,请将 `1.1.1.1` 修改为你的服务器 IP。
post 访问不缓存
if ($request_method = POST) {
set $skip_cache 1;
}
动态查询不缓存
if ($query_string != "") {
set $skip_cache 1;
}
后台等特定页面不缓存
if ($request_uri ~ "/wp-admin/|/xmlrpc.php|wp-..php|/feed/|index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
登录用户、评论过的用户不展示缓存
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
这里请参考你网站之前的配置,特别是 sock 的路径,弄错了就 502 了!
location ~ 2.php(/|$) {
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-83.sock;
fastcgi_index index.php;
include fastcgi.conf;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
# 新增的缓存规则
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache "$upstream_cache_status From $host";
fastcgi_cache paolu.host;
add_header Cache-Control max-age=0;
add_header Nginx-Cache "$upstream_cache_status";
add_header Last-Modified $date_gmt;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
etag on;
fastcgi_cache_valid 200 301 302 1d;}
缓存清理配置
location ~ /purge(/.*) {
allow 127.0.0.1;
allow "1.1.1.1"; # 引号要保留
deny all;
fastcgi_cache_purge paolu.host "$scheme$request_method$host$1";
}
宝塔用户可以参考下图配置:

配置完成后,访问你的网站。如果响应头有 `Nginx-Cache: HIT`,说明配置成功,如下图:

如果你需要清理缓存,请使用上文中安装的插件 `Nginx Helper`。
## 总结
如果配合 CDN 的缓存功能,可能会更快,但作者还没分析到那么深入,过两天再发一篇文章吧。
---
[^1]: [WordPress 在 PHP 8 各版本中的性能测试 - 站长帮](https://zhanzhangb.cn/blog/wordpress-php8-performance.html)