WordPress 优化:宝塔面板开启 Nginx fastcgi_cache 静态缓存加速

编辑于:2022年04月27日

在宝塔面板开启Nginxfastcgi_cache模块,为WordPress的伪静态页面生成缓存,可以显著提高低配置服务器的负载性能。按照网上宝塔教程部署总是 404 或 502 报错,检查后确认,是一些需自定义参数未标注导致未修改所致。虫子菌将优化后的代码分享如下,教程对需要修改之处已做详细说明。

1. 检查 Nginx 是否编译了该模块

一般通过宝塔面板编译安装 Nginx 时会默认编译该缓存模块,通过nginx -V 2>&1 | grep -o ngx_cache_purge 命令可以判断,出现ngx_cache_purge即为已编译。

2. 宝塔 Nginx 开启 fastcgi_cache

设置过程分两步,分别是修改 Nginx 的配置文件修改网站的配置文件

3. 第一步 修改 Nginx 的配置

如上所示,按序点击:软件商店 -> 运行环境 -> Nginx -> 配置修改,将如下 Nginx 配置代码复制到 server 的上方,保存。

fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=CCCITU:128m inactive=1d max_size=1G; #站点 1 缓存配置
#fastcgi_cache_path /tmp/wpcache2 levels=1:2 keys_zone=CHONGZI:128m inactive=1d max_size=1G; #站点 2 缓存配置,如果服务器多个网站需要开启缓存,则使用不同的 fastcgi_cache_path 和 keys_zone,设置教程 https://www.cccitu.com/2205226.html
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;
fastcgi_hide_header Pragma; #不对从被代理服务器传来的应答进行转发
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;#忽略一切 nocache 申明,避免不缓存伪静态等

参数说明

  • path:缓存存放目录;
  • levels:指定该缓存空间有两层 hash 目录,第一层目录为 1 个字母,第二层目录为 2 个字母,保存的文件名会类似/tmp/wpcache/b/29/XXXXXX;
  • keys_zone:缓存区的命名,范例中是全大写 CCCITU 可根据需要自定义,但要与网站配置中相一致;
  • 128m:内存缓存空间大小为 128MB,可根据服务器配置自由调整;
  • inactive:1d 指如果缓存数据在 1 天内没有被访问,将被删除,相当于 expires 过期时间的配置,可根据需要自由调整;
  • max_size:1g 指硬盘缓存空间为 1G,可根据服务器配置调整大小,也可以直接删掉,如果删掉 max_size=1G,就代表完全使用内存来缓存;

4. 第二步 修改 网站 的配置

4.1 找到 PHP 连接和引用配置

  • 软件商店 -> 运行环境 -> PHP ->FPM配置文件 -> listen = 后面是 PHP 连接配置

  • 网站 -> 设置 -> 配置文件 -> 找到 PH P引用配置

4.2 修改默认的缓存配置文件

set $skip_cache 0; #设置教程 https://www.cccitu.com/2205226.html
#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;
}
location ~ [^/]\.php(/|$)
    {
        try_files $uri =404;
        fastcgi_pass unix:/tmp/php8.sock; #注意!不同PHP版本,此处填写也不同,以自己服务器的配置为准
        fastcgi_index index.php;
        include enable-php-80.conf; #注意!不同的PHP编译方式,此处的配置文件位置也有可能不同,以自己服务器的配置为准
        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 CCCITU; #注意!此处要与第一步配置中的 keys_zone 名称相同,在本例中,keys_zone 用的是 CCCITU 所以此处也用的 CCCITU
        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 304 1d; #缓存的状态码和缓存时间
}

#缓存清理配置(可选模块,请细看下文说明)
location ~ /purge(/.*) {
    allow 127.0.0.1;
    allow X; #注意!将此处的X替换为你服务器的真实IP地址,设置教程 https://www.cccitu.com/2205226.html
    deny all;
    fastcgi_cache_purge CCCITU "$scheme$request_method$host$1"; #注意!此处要与第一步配置中的 keys_zone 名称相同,在本例中,keys_zone 用的是 CCCITU 所以此处也用的 CCCITU
}
  • 第21行的/tmp/php8.sock修改为自己服务器 PHP 的连接配置,在此文 4.1部分已演示如何找;
  • 第23行的enable-php-80.conf修改为自己服务器 PHP 的 conf 文件位置,在此文 4.1部分已演示如何找;
  • 第29行的名称要与教程第一步中的keys_zone名称 CCCITU 相同,如果你没改动第一步提供的配置范例,那么此处也不用改动;
  • 第43行的X替换为你自己服务器的真实 IP 地址;
  • 第45行的名称要与教程第一步中的keys_zone名称 CCCITU 相同,如果你没改动第一步提供的配置范例,那么此处也不用改动;

4.3 部署修改完毕的配置文件

首先,打开站点的配置文件,先将如上图所示的index.html index.htm移动到index.php的前面。

然后,将复制此文 4.2 部分修改完毕的缓存配置代码,复制到root的下方,最后保存。

检查 Nginx 的缓存是否生效

先退出登录以游客身份打开网站,或者用浏览器的隐身模式开网站。

WordPress 优化:宝塔面板开启 Nginx fastcgi_cache 静态缓存加速

右键 -> 检查 -> 浏览器控制台 -> 网络 -> 刷新 ->点击网址,显示 nginx-cache: HIT 和 x-cache: HIT 即为缓存成功。

同一个服务器的多个网站都开启 Nginx fastcgi_cache 缓存

Nginx 配置

fastcgi_cache_path /tmp/wpcache2 levels=1:2 keys_zone=CHONGZI:128m inactive=1d max_size=1G;

就在已添加的 Nginx 配置基础上,再加一行代码,为第二个网站设置不同的 fastcgi_cache_path 路径和 keys_zone 名称(大写),比如,可将第二个网站 fastcgi_cache_path 设置为 /tmp/wpcache2 将 keys_zone 设置为 CHONGZI

网站 配置

复制第一个网站的缓存配置,只需要将第 29 和 45 行的名称,改为CHONGZI也就是和 Nginx 配置新加的一行代码中的 keys_zone 名称相同,然后将修改好的网站配置文件,复制到第二个网站的配置中即可。

如果添加第三个网站,依次类推,为 Nginx 配置再加一行代码,以及将第三个网站的缓存配置中的第 29 和 45 行的名称,改为与 Nginx 配置新加代码中 keys_zone 名称相对应即可。

相关推荐

WordPress 选择什么固定链接形式比较好?

WordPress 选择什么固定链接形式比较好?

WordPress 的设置中有个固定链接选项,可以选择文章、页面、分类和标签等页面链接的形式。从实际出发与各位同学们聊聊,虫子菌为什么采用/p/%postname%.html和cat、tag作为分类和标签的前缀的形式。 文章和页面的自 ...

WordPress 分类和标签页链接结尾添加/斜杠

WordPress 分类和标签页链接结尾添加/斜杠

WordPress 固定链接 自定义结构以.html结尾时,分类和标签页的链接尾部将不会以/结尾,这样的链接一般是无法被缓存的。 两种纯代码添加斜杠的方法 任选一种代码,复制到所用主题 functions.php 底部保存生效 方法一 ...

WordPress自定义函数以*星号隐藏手机号中间四位

WordPress自定义函数以*星号隐藏手机号中间四位

手机号作为敏感的个人隐私信息,需要先做处理再对外显示。当 WordPress 某些地方的用户名是手机号,可使用下方的自定义函数,对用户名中的手机号做*星号替换隐藏。 自定义函数 //手机号账号中间字符串以*隐藏 //教程 ...

暂无评论