我有几个 WordPress 的站点,都放在了香港的服务器上,访问起来很慢。陆陆续续优化了很多地方,结果都不尽如人意,直到使用了 Nginx 自带的缓存。

PS: 优化在《WordPress被黑处理过程记录》之前就完成了,被黑第一时间以为是优化导致的,因为这么多年没有被黑过,刚优化完几天被黑了。

下面是具体开启 FastCGI 缓存的过程。

Nginx管理

登录宝塔,打开Nginx管理

宝塔环境下 WordPress 使用 Nginx 开启 FastCGI 缓存教程-程序旅途

在配置修改中添加以下配置

fastcgi_cache_path /dev/shm/chengxulvtu-cache levels=1:2 keys_zone=chengxulvtu:250m inactive=1d max_size=1G;

/dev/shm 是linux下一个利用内存虚拟出来的目录,这个目录中的文件都是保存在内存中的。/dev/shm/chengxulvtu-cache 是缓存存储的位置。

作为参考,可以只修改 /dev/shm/xxx-cahce 和 keys_zone=xxx ,将xxx替换成你的。

使用命令 df -T,可以查看 tmpfs 文件系统的挂载情况

宝塔环境下 WordPress 使用 Nginx 开启 FastCGI 缓存教程-程序旅途

第2个站点,就再添加一条配置,如:

fastcgi_cache_path /dev/shm/lgd-cache levels=1:2 keys_zone=lgd:250m inactive=1d max_size=1G;

几个站点,就添加几条配置。

站点Nginx配置

在站点管理中,打开设置,修改配置文件

宝塔环境下 WordPress 使用 Nginx 开启 FastCGI 缓存教程-程序旅途

在 #SSL-END 下方添加如下配置

set $skip_cache 0;
#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了!如果你的网站使用PHP7.4,就写-74.sock
location ~ [^/].php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-74.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 chengxulvtu; 
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; # 只允许本站用 frame 来嵌套
add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
add_header X-XSS-Protection "1; mode=block"; # XSS 保护
etag on;
fastcgi_cache_valid 200 301 302 1d;
}
#缓存清理配置
location ~ /purge(/.*) {
allow 127.0.0.1;
allow "5.5.5.5"; # 引号要保留
deny all;
fastcgi_cache_purge chengxulvtu "$scheme$request_method$host$1";
}

需要修改以下几个地方

location ~ [^/].php(/|$)中

fastcgi_pass unix:/tmp/php-cgi-74.sock; # 根据你的php版本设置
fastcgi_cache chengxulvtu; 将 chengxulvtu # 修改成在前面设置的keys_zone的值

location ~ /purge(/.*) 中

allow "5.5.5.5"; #修改成你服务器的IP
fastcgi_cache_purge chengxulvtu "$scheme$request_method$host$1"; #将 chengxulvtu 修改成在前面设置的keys_zone的值

wp-config.php 配置

在 wp-config.php 中添加如下配置

define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/dev/shm/chengxulvtu-cache');

/dev/shm/chengxulvtu-cache 替换成你的

权限设置

如果你的站点根目录中有 .user.ini,需要将缓存路径添加进去,我的是 /dev/shm/chengxulvtu-cache

宝塔环境下 WordPress 使用 Nginx 开启 FastCGI 缓存教程-程序旅途

Nginx Helper

登录WordPress 后台,安装 Nginx Helper插件。这个插件可以在你修改了文章后,自动清除缓存。

Enable Purge,缓存方法选择 nginx Fastcgi cache,Purge方法选择 Delete local server cache files

宝塔环境下 WordPress 使用 Nginx 开启 FastCGI 缓存教程-程序旅途

至此,wordpress的 fastcgi缓存就配置好了。打开网站,可以看到响应头中nginx-cache:HIT,说明成功了。

宝塔环境下 WordPress 使用 Nginx 开启 FastCGI 缓存教程-程序旅途

wordpress 登录状态下,nginx-cache 则是 BYPASS。