编程 / 宝塔

宝塔系列教程 —— wordpress 开启 nginx fastcgi_cache 缓存加速

yanghx@yidacp.com · 4月3日 · 2025年本文共5408个字 · 预计阅读19分钟20次已读

Nginx fastcgi_cache深度优化指南:释放WordPress性能潜力

通过配置Nginx的fastcgi_cache缓存,您可以显著提升WordPress网站的性能。​与传统的PHP缓存插件相比,这种方法更高效,特别适合资源有限的服务器。

一、安装Nginx ngx_cache_purge模块

首先,确保您的Nginx已包含ngx_cache_purge模块。​您可以通过以下命令检查:​
输入命令后,结果如图:

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

也可使用 nginx -V 来查看所有编译模块里面有没有这个模块

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

二、Nginx开启fastcgi_cache缓存-配置实例

在Nginx配置文件中,为您的站点添加以下缓存设置:​
宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

1. 配置实例(单站点)

#下面各个参数的含义请自行百度!
#下面2行的中的wpcache路径请自行提前创建,否则可能会路径不存在而无法启动nginx,max_size请根据分区大小自行设置
fastcgi_cache_path /www/server/wpcache levels=1:2 keys_zone=WORDPRESS:128m inactive=1d max_size=1G;
fastcgi_temp_path /www/server/wpcache/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
#忽略一切nocache申明,避免不缓存伪静态等
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
#Ps:如果是多个站点,以上内容不要重复添加,否则会冲突,可以考虑将以上内容添加到nginx.conf里面,避免加了多次。

server
{
    listen 80;
    listen 443 ssl http2;
    server_name www.daniao.org;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/www.daniao.org;

     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了!
        location ~ [^/]\.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 yanghaixiong;
                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 "此处填写你的服务器IP";
            deny all;
            fastcgi_cache_purge yanghaixiong "$scheme$request_method$host$1";
        }
      …………………此部分省略……………………  

}

2. 配置实例(多站点)

#站点 1 缓存配置
fastcgi_cache_path /tmp/wpcache/yanghaixiong levels=1:2 keys_zone=yanghaixiong:128m inactive=1d max_size=1G;
#站点 2 缓存配置
fastcgi_cache_patbobyaih /tmp/wpcache/anosiar levels=1:2 keys_zone=anosiar:128m inactive=1d max_size=1G;
#公共缓存配置
fastcgi_temp_path /tmp/wpcache/temp;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
# #忽略一切nocache申明,避免不缓存伪静态等
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

关于sock,宝塔面板的在/www/server/php/72/etc/php-fpm.conf中有配置路径宝塔面板的sock,如果不清楚,可以自己打开看下,然后复制到需要修改的地方就可以了。

这里注意:如果要开启更多站点缓存,请继续增加,注意每个站点的 缓存路径 和 keys_zone 要自定义区分一下,不要一样。

上述代码中得 fastcgi_cache_path 的参数也可以根据自己站点的需要来设定,具体含义如下:

  • path 表示缓存存放目录。
  • levels 表示指定该缓存空间有两层 hash 目录,第一层目录为 1 个字母,第二层目录为 2 个字母,保存的文件名会类似/tmp/blogcache/c/29/XXXXXX ;
  • keys_zone 参数用来为这个缓存区起名。
  • 128m 指内存缓存空间大小为 128MB。
  • inactive 的 1d 指如果缓存数据在 1 天内没有被访问,将被删除。相当于 expires 过期时间的配置。
  • max_size 的 1g 是指硬盘缓存空间为 1G。

3. 简单说明

本地or内存?在fastcgi_cache_path和fastcgi_temp_path中,有人会建议将它设置为内存路径,例如:/dev/shm/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;,如果你的磁盘IO很慢的话建议采用此方式,毕竟内存的读写速度非常快。

add_header Cache-Control如果是动态内容要实时更新的话,可以设置为0,否则可以设置时间大一些。

请仔细阅读代码中的所有注释,该修改的修改,该创建的创建,该补充的根据实际情况补充,额,基本没什么问题的,宝塔面板的直接复制粘贴就可以了。

三、安装Nginx Helper插件

后台搜索 Nginx Helper 插件安装启用,这个插件是为 wordpress fastcgi_cache缓存打造的一个插件,十分的好用。
宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

首先是开启purge,然后我们选择nginx Fastcgin cahe,因为就我们用就是这个缓存。之后选择Delete local server cache files。当然第一个也可以用,但是一般推荐用Delete local server cache files****,因为每个服务器的环境都不一样,缓存路径也会不尽相同就会导致插件无法找到缓存文件并删除!

插件还提供了其它的一些设置,功能非常丰富,例如发表新文章、新评论时是否更新Nginx缓存等。
宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

1. 清理模式

清理模式还需要仔细说下。

①、purge 模式

这个模式需要保留上文 Nginx 配置中的 purge 清理路径,清理的时候会产生一个请求。

出于安全考虑,一般 purge 都不会完全开放!只有特定的 IP 可以访问,所以,如果用了 CDN 的朋友,再使用模式一,则需要在服务器上的 /etc/hosts 中将网站域名解析为服务器真实 IP,以便插件直接请求 purge 路径,而不用走 CDN 节点,避免请求被拒绝。还是没搞懂的话就放弃这个模式吧!

②、文件模式

模式二是直接清理对应的缓存文件,不需要请求 purge 这个清理路径,所以使用模bobyai式二,不需要配置上文 Nginx 的 purge 规则(我个人推荐使用这个模式)。

由于插件作者定义的缓存路径是/www/server/wpcache ,而我们可能会根据服务器实际情况来自定义缓存路径,这样一来,缓存路径的不同就会导致插件无法找到缓存文件并删除!

2. 解决办法

很简单,在 WordPress 根目录下的 wp-config.php 中新增如下代码即可:

//根据实际情况定义缓存的存放路径
define( 'RT_WP_NGINX_HELPER_CAClaoxiongb2cHE_PATH','/www/server/wpcache');

不知道添加到第几行的话,可以添加到define(‘WPLANG’, ‘zh_CN’); 的后面即可。添加后建议重载一下 php,确保变量生效(主要针对开启了 PHP 缓存的网站!)。

四、Nginx fastcgi_cache效果预览

启用了Nginx fastcgi_cache后,我们就可以在浏览器Header 头部信息中看到已经命中了。

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

对于已经设置了不缓存的页面,Nginx fastcgi_cache会直接显示BYPASS,我们如果是登录状态那是不显示缓存的,如图:

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

同时,我们服务器的缓存路径中也能看到Nginx fastcgi_cache生成的缓存文件。

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

如果你发现你的评论过的用户依然用的是缓存,那应该是WP没有记住cookie,把以下代码加入到 functions.php中即可。

add_action('set_comment_cookies','coffin_set_cookies',10,3);
function coffin_set_cookies( $comment, $user, $cookies_consent){
   $cookies_consent = true;
   wp_set_comment_cookies($comment, $user, $cookies_consent);
}

五、总结

Nginx开启fastcgi_cache缓存对于加快网页响应速度以及节省服务器资源有着非常重要的意义,下图是alibabacloud.com的测试结果,可以看出来启用缓存后服务器的承载能力有了非常大的提升。

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

1. 细节调整

启用fastcgi_cache缓存时,发现在Nginx配置文件中添加了Cache-Control信息,但是总是不生效。HTTP头部信息会总会包含以下信息:

Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache,

经过排查,问题出在了宝塔面板中的 session.cache_limiter 的PHP.ini设置部分,默认值是nocache,我们需要将它设置为none即可。

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

2. x-powered-by

我们用宝塔面板会默认的出现X-Powered-By 7.2.12 出现php的版本信息,从安全角度来说还是很不友好的。X-Powered-By是网站响应头信息其中的一个,出于安全的考虑,一般会修改或删除掉这个信息。

宝塔面板里我们如何修改呢:PHP.ini设置expose_php = off

宝塔系列教程  —— wordpress 开启 nginx fastcgi_cache 缓存加速

设置好之后,我们重载php服务。

利用宝塔面板给WordPress开启Nginx fastcgi_cache缓存加速方法就说完了,如果有什么疑问可以留言,说实话利用宝塔面板来搞这个Nginx fastcgi_cache缓存加速还是非常方便的。喜欢折腾的小伙伴赶紧试试。

其实,Nginx Helper还支持redis cache模式的缓存,也是非常不错的!

Nginx Helper真的是非常强大,关键是这么强大的插件还是免费的。

Click to rate this post!
[Total: 0 Average: 0]
0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!