给 WordPress 做一个全套加速
本文最后更新于9 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

tags: WordPress, 性能优化, 缓存, Nginx, Redis

最近给本站做了一整套加速优化,把成果和方法整理出来,分享给同样用 WordPress + Nginx 的朋友。全程不花一分钱,所有工具都是开源/免费的。

最终效果

优化前,匿名访问首字节时间(TTFB)在 800ms~1.2s 左右(取决于数据库查询和 PHP 执行时间)。优化后:

  • FastCGI 缓存命中 → TTFB ≈ 100ms
  • Redis 对象缓存 → 数据库查询次数降为 0~2 次
  • OPcache JIT 编译 → PHP 执行效率翻倍
  • WebP 自动转换 → 图片体积减少 60%~80%

一、Nginx FastCGI 缓存(最立竿见影的一步)

直接在 Nginx 配置文件(站点 conf)的 http 块或 server 块前加上缓存定义:

# 在 http {} 块内
fastcgi_cache_path /tmp/fastcgi_cache levels=1:2 keys_zone=WPCACHE:128m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

然后在 location ~ \.php$ 块内添加:

set $skip_cache 0;

# 登录用户、评论者、后台不缓存
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
    set $skip_cache 1;
}

# POST 请求不缓存
if ($request_method = POST) {
    set $skip_cache 1;
}

# 不带参数的首页、文章页缓存 30 分钟
fastcgi_cache WPCACHE;
fastcgi_cache_valid 200 30m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache $upstream_cache_status;

解释:

  • 缓存文件存到 /tmp/fastcgi_cache(内存临时文件系统,性能好)
  • 缓存区大小 128MB,存 60 分钟无访问自动清理
  • X-Cache 响应头会显示 HIT(命中)或 MISS(未命中),方便调试

改完 nginx -t 检查语法,systemctl reload nginx 生效。


二、安装 Redis 7.0 + PHP Redis 扩展

2.1 安装 Redis

# 编译安装 Redis 7.0
wget https://download.redis.io/releases/redis-7.0.15.tar.gz
tar xzf redis-7.0.15.tar.gz
cd redis-7.0.15
make -j$(nproc)
make install

配置 systemd 服务 /etc/systemd/system/redis.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
RestartSec=5
User=redis
Group=redis

[Install]
WantedBy=multi-user.target

2.2 安装 PHP Redis 扩展

# 用 pecl 安装
pecl install redis-6.3.0

# 或在 php.ini 中添加
extension=redis.so

验证:php -m | grep redis 看到输出即成功。


三、WordPress Redis Object Cache 插件

安装并激活 Redis Object Cache 插件:

  1. 插件 → 安装插件 → 搜索 “Redis Object Cache”
  2. 安装并激活
  3. 进入 设置 → Redis,点击 “启用对象缓存”

启用后效果:数据库查询次数从 10~30 次降为 0~2 次,后台响应速度明显提升。


四、WP Super Cache(页面缓存层的最后保障)

安装 WP Super Cache 3.1.1

  1. 插件 → 安装插件 → 搜索 “WP Super Cache”
  2. 激活后进入 设置 → WP Super Cache
  3. 推荐设置:
选项设置值
缓存模式PHP 缓存模式
压缩✅ 启用
缓存重建✅ 启用
已知用户✅ 不缓存已知用户
缓存超时1800 秒(30 分钟)
预缓存可选,建议开启

注意:WP Super Cache 的页面缓存Nginx FastCGI 缓存 是两个独立的缓存层,互不冲突。FastCGI 在最外层挡掉大部分请求,WP Super Cache 作为 PHP 层的补充。


五、Nginx Helper(自动清除 FastCGI 缓存)

安装 Nginx Helper 2.3.5:

  1. 插件 → 安装插件 → 搜索 “Nginx Helper”
  2. 激活后进入 设置 → Nginx Helper
  3. 配置:
  • Enable Purge → ✅ 启用
  • Purge Methodunlink_files(删除缓存文件)
  • Caching Methodfastcgi
  • Purge URL → 按需勾选(推荐全选)

这样每次发布/更新文章、发表评论时,Nginx Helper 会自动删除对应的 FastCGI 缓存文件,保证用户看到的是最新内容。


六、EWWW Image Optimizer(图片 WebP 自动转换)

安装 EWWW Image Optimizer 8.7.1:

  1. 激活后进入 设置 → EWWW IO
  2. 推荐设置:
  • WebP Conversion → ✅ 开启(推荐 ExactDN 模式或本地转换)
  • Lazy Load → ✅ 开启(如果主题没有自带懒加载)
  • 自动优化 → ✅ 上传图片时自动优化

图片是 WordPress 页面体积的主要贡献者。开启 WebP 后,图片体积减少 60%~80%,且对用户完全透明(浏览器支持 WebP 时自动输出 WebP,不支持时输出原图)。


七、WP-Optimize(数据库清理,仅用优化功能)

安装 WP-Optimize 4.5.5:

  1. 激活后进入 WP-Optimize → 数据库
  2. 只做数据库优化:清理草稿、回收站、垃圾评论、优化表
  3. ⚠️ 页面缓存功能关掉,避免与 WP Super Cache 冲突

定期运行数据库优化(建议每周一次),保持数据库整洁。


八、OPcache 深度调优:开启 JIT

php.ini 中配置:

[opcache]
opcache.enable=1
opcache.memory_consumption=64
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=30000
opcache.revalidate_freq=2
opcache.validate_timestamps=1
opcache.use_cwd=0
opcache.enable_file_override=1

; JIT 配置(PHP 8.0+)
opcache.jit=tracing
opcache.jit_buffer_size=64M

参数解释:

  • memory_consumption=64 → OPcache 缓存 64MB 编译后的 PHP 代码
  • max_accelerated_files=30000 → 最多缓存 30000 个 PHP 文件(WordPress + 插件 + 主题很够用)
  • revalidate_freq=2 → 每 2 秒检查文件是否有修改(开发友好,改代码最多等 2 秒生效)
  • validate_timestamps=1 → 启用文件修改时间检查
  • jit=tracing → PHP 8 的 JIT 编译,追踪模式(性能最好)
  • jit_buffer_size=64M → JIT 用 64MB 内存存放编译后的机器码

生产环境建议把 validate_timestamps=0 + revalidate_freq=0,改代码后手动清缓存,性能更好。


九、一条指令清所有缓存

为了方便日常运维,写了一个统一清缓存脚本 .php,放在网站根目录:

<?php
// 验证密钥
$key = isset($_GET['key']) ? $_GET['key'] : '';
if ($key !== '你的密钥') {
    die('Access Denied');
}

// 1. 清理 FastCGI 缓存
$fastcgi_cache_path = '/tmp/fastcgi_cache';
system("rm -rf $fastcgi_cache_path/*");

// 2. 清理 WP Super Cache
if (function_exists('wp_cache_clear_cache')) {
    wp_cache_clear_cache();
}

// 3. 清理 OPcache
if (function_exists('opcache_reset')) {
    opcache_reset();
}

// 4. 清理 Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->flushAll();

echo 'All cache cleared!';

访问 https://你的域名/***.php?key=你的密钥 即可一键清空所有缓存层,非常方便。


十、验证优化效果

检查 FastCGI 缓存是否命中

curl -I https://你的域名/
# 看到 X-Cache: HIT 即命中

检查 Redis 对象缓存

后台 → 设置 → Redis,查看命中率,应该 >95%。

检查 WebP 是否生效

浏览器 DevTools → Network,查看图片响应头的 Content-Type 是否为 image/webp

检查 OPcache

php -i | grep opcache
# 或安装 Opcache Status 插件可视化查看

注意事项

  1. 插件冲突:不要同时启用两个页面缓存插件(我们这里 FastCGI 是 Nginx 层,WP Super Cache 是 PHP 层,不冲突。但 WP Super Cache 不要和 W3 Total Cache 的页面缓存同时开)
  2. 修改文件后清缓存:改 CSS/JS/PHP 后,记得执行一次清缓存(FastCGI + OPcache + Redis),否则看不到效果
  3. 备份配置:改 Nginx/PHP 配置前先备份,以防万一
  4. 各缓存层的关系
   用户请求 → Nginx FastCGI 缓存(最外层,最快)
            → 未命中时到 PHP → WP Super Cache
                              → 未命中时到 WordPress → Redis 对象缓存(减少数据库查询)
                                                     → 数据库

总结

这一套优化下来,没有用任何收费服务,纯开源方案。关键在于多级缓存协同工作

层级技术作用
L1Nginx FastCGI 缓存挡掉 90%+ 的匿名访问请求
L2WP Super CachePHP 层页面缓存,补充缓存粒度
L3Redis Object Cache减少数据库查询,加速动态请求
L4OPcache JIT减少 PHP 编译开销,提升执行效率
L5WebP 图片减少传输体积,降低加载时间

如果你的 WordPress 也在变慢,不妨按这个步骤试试。有任何问题欢迎留言交流!

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
加载中...
🎵 加载中...