如果你正在使用 LNMP (Linux, Nginx, MySQL, PHP) 环境托管 WordPress,你已经拥有了一个非常高效的基础架构。但默认的安装往往偏向“保守”和“兼容性”。想要让你的网站速度媲美甚至超越 CyberPanel 等集成环境,我们需要进行深度的定制优化。
本文将手把手教你通过 4 个步骤,从 PHP 扩展到 Nginx 核心缓存,全方位提升 WordPress 的响应速度。每一步操作后,你都能感受到性能的提升。
🚀 优化概览
- 第一步:安装 Redis 与 OPcache 扩展(基础地基)
- 第二步:调整 OPcache 参数(脚本内存化)
- 第三步:启用 Redis 对象缓存(减少数据库压力)
- 第四步:配置 Nginx FastCGI 缓存(静态化核心大招)
第一步:安装必要的 PHP 扩展
LNMP 安装包自带了一个非常方便的脚本 addons.sh。我们需要利用它来安装 Redis(用于数据库查询缓存)和 OPcache(用于 PHP 脚本编译缓存)。
操作步骤:
- SSH 登录你的服务器。
- 进入 LNMP 安装目录(通常是
/root/lnmp2.0或类似目录)。 - 安装 Redis:
./addons.sh install redis注:安装过程中询问版本时,选择最新的 Stable(稳定)版即可。
- 安装 OPcache:
./addons.sh install opcache注:如果提示“已安装”请忽略;若未安装,按回车确认安装。
第二步:优化 PHP OPcache 配置
默认的 OPcache 配置较为保守。为了追求极致速度,我们需要让 PHP 脚本尽可能“永久”地驻留在内存中,避免重复编译。
操作步骤:
1. 编辑 PHP 配置文件:
vi /usr/local/php/etc/php.ini
2. 按 / 搜索 [opcache],找到相关配置区域。修改或添加以下数值:
opcache.memory_consumption=256 ; 分配 256M 内存给脚本缓存
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000 ; 缓存的文件数量上限
opcache.revalidate_freq=0 ; 0表示每次请求检查文件更新(生产环境追求极致可设为60)
opcache.validate_timestamps=1 ; 开启时间戳校验
opcache.fast_shutdown=1
3. 保存退出,并重载 PHP 服务:
lnmp php-fpm reload
第三步:在 WordPress 中开启 Redis 对象缓存
这一步将极大减少数据库的查询次数 (Queries),对于内容较多的站点效果立竿见影。
操作步骤:
- 登录 WordPress 后台,进入 插件 -> 安装插件。
- 搜索并安装 Redis Object Cache (作者是 Till Krüss)。
- 启用插件,进入 设置 -> Redis,点击 Enable Object Cache。
提示: 只要状态显示为 Connected,说明你的数据库查询已经被 Redis 接管了。
第四步:配置 Nginx FastCGI 缓存(核心大招)
这是让速度“起飞”的关键步骤。它的原理是让 Nginx 直接返回已经生成的 HTML 页面,完全跳过 PHP 处理过程,实现毫秒级响应。
我们需要修改两个 Nginx 配置文件。
1. 修改 Nginx 主配置 (nginx.conf)
我们需要定义缓存的存储路径和规则。
- 编辑文件:
vi /usr/local/nginx/conf/nginx.conf - 在
http { ... }块内(但在 server 块之外),加入以下两行:
# 缓存路径:/tmp/wpcache,2级目录,内存索引100m,最大1g,60分钟未使用自动清理
fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=WORDPRESS:100m max_size=1g inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
2. 修改站点配置文件 (vhost)
我们需要告诉 Nginx 哪些页面可以缓存,哪些(如后台、购物车)绝对不能缓存。
- 编辑文件:
vi /usr/local/nginx/conf/vhost/你的域名.conf - 步骤 A:设置缓存排除规则
在server { ... }块的最上方(listen 下面),粘贴以下代码:
# 默认允许缓存
set $skip_cache 0;
# POST请求(提交表单)不缓存
if ($request_method = POST) {
set $skip_cache 1;
}
# 带有查询参数(?xyz=...)不缓存
if ($query_string != "") {
set $skip_cache 1;
}
# 后台路径、XMLRPC、Feed 等不缓存
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
# 登录用户、评论者、Cookie 不缓存
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
- 步骤 B:应用缓存到 PHP 处理块
找到处理 PHP 的location ~ [^/]\.php(/|$) { ... }块,在里面加入缓存指令。修改后如下所示:
location ~ [^/]\.php(/|$) {
# ...原有配置保持不变 (如 fastcgi_pass 等)...
fastcgi_pass unix:/tmp/php-cgi.sock; # 你的原有配置
fastcgi_index index.php; # 你的原有配置
include fastcgi.conf; # 你的原有配置
# === 新增以下 5 行 ===
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status; # 添加调试头以便验证
}
3. 应用更改
最后,创建缓存目录并重启 Nginx 使配置生效:
mkdir /tmp/wpcache
chown -R www:www /tmp/wpcache
nginx -t
lnmp nginx reload
一键优化
- bash <(curl -sL https://light.you17.uk/wp-content/uploads/file/wp-optimize.sh)
📊 如何验证加速效果?
完成以上步骤后,请按以下方法验证:
- 打开浏览器隐身模式访问你的网站首页。
- 按
F12打开开发者工具,切换到 Network (网络) 标签。 - 点击第一个请求(你的域名),查看 Headers (响应头)。
- 寻找
X-FastCGI-Cache字段:- MISS: 第一次访问,正在生成缓存。
- HIT: 第二次刷新,直接命中缓存(此时 TTFB 通常在 50ms 以内,速度极快)。
- BYPASS: 登录后台时显示,说明规则生效,没有缓存后台。
恭喜!如果看到 HIT,说明你的 LNMP WordPress 网站已经成功开启了服务器级缓存,访问速度将获得质的飞跃。