前言
本来想搞那个 nginx 压缩模块的,结果死活装不上,于是就发现了这个模块 Nginx fastcgi_cache,并且我发现使用这个 nginx 的模块缓存几乎秒杀 wp 的各种缓存插件,在宝塔面板开启 Nginx 的 fastcgi_cache 模块,为 WordPress 的伪静态页面生成缓存,可以显著提高低配置服务器的负载性能。晓白实测速度截图
wp 的后台检测的速度可以低到 19ms
我们这个都不需要安装插件,只需要配置一下 nginx 的设置即可
在此之前,请给服务器设置快照与数据库备份,防止发生不可逆的操作,小白建议反复观看,教程与操作的地方非常多,如果实在没有动手能力,可以直接放弃,因为这对于一般初学者来说还是太难了
教程开始
首先我们需要编译安装 nginx,宝塔用户可以直接进行编译安装 nginx(需要先卸载原来的 nginx),一般宝塔的 nginx 编译安装都是默认自带这个模块的,所以不需要额外的安装
设置过程分两步,分别是修改 Nginx 的配置文件和修改网站的配置文件
第一步修改 Nginx 的配置
如上所示,按序点击:软件商店 -> 运行环境 -> Nginx -> 配置修改,将如下 Nginx 配置代码复制到 server 的上方,保存。
本文隐藏内容
fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=xbnb:128m inactive=1d max_size=1G; #站点 1 缓存配置
fastcgi_cache_path /tmp/wpcache2 levels=1:2 keys_zone=lsposed:128m inactive=1d max_size=1G; #站点 2 缓存配置,如果服务器多个网站需要开启缓存,则使用不同的 fastcgi_cache_path 和 keys_zone,设置教程 https://www.xbnb.cn/14346
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:缓存区的命名,范例中是 xbnb 可根据需要自定义,但要与网站配置中相一致;
- ⭕128m:内存缓存空间大小为 128MB,可根据服务器配置自由调整;
- ⭕inactive:1d 指如果缓存数据在 1 天内没有被访问, 将被删除,相当于 expires 过期时间的配置,可根据需要自由调整;
- ⭕max_size:1g 指硬盘缓存空间为 1G,可根据服务器配置调整大小,也可以直接删掉,如果删掉 max_size=1G,就代表完全使用内存来缓存;
第二步 修改 网站 的配置
找到 PHP 连接和引用配置
⭕软件商店 -> 运行环境 -> PHP ->FPM 配置文件 -> listen = 后面是 PHP 连接配置,这个涉及后面的部分代码修改
⭕网站 -> 设置 -> 配置文件 -> 找到 PH P 引用配置,同样需要记得这个。因为每个人用的 php 版本不一样,所以代码也不一样,当然,如果你和我一样也是 php8.2,那么就不需要记住上面两个设置了
修改默认的缓存配置文件
本文隐藏内容
set $skip_cache 0; #设置教程 https://www.xbnb.cn/14346
#post 访问不缓存,
if ($request_method = POST) {
set $skip_cache 1;
}
#动态查询不缓存
if ($query_string != "") {
set $skip_cache 1;
}
#后台等特定页面不缓存 (其他需求请自行添加即可)
if ($request_uri ~* "/wp-admin|/images/api.php|/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.2.sock; #注意!不同 PHP 版本,此处填写也不同,以自己服务器的配置为准,这里我是 php8.2
fastcgi_index index.php;
include enable-php-82.conf; #注意!不同的 PHP 编译方式,此处的配置文件位置也有可能不同,以自己服务器的配置为准,同理 8.2,但是设置填 82
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 xbnb; #注意!此处要与第一步配置中的 keys_zone 名称相同,在本例中,keys_zone 用的是 xbnb 所以此处也用的 xbnb
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.xbnb.cn/14346
deny all;
fastcgi_cache_purge xbnb "$scheme$request_method$host$1"; #注意!此处要与第一步配置中的 keys_zone 名称相同,在本例中,keys_zone 用的是 xbnb 所以此处也用的 xbnb
}
- 第 21 行的/tmp/php8.sock 修改为自己服务器 PHP 的连接配置,在此文 的部分已演示如何找;
- ⭕第 23 行的 enable-php-80.conf 修改为自己服务器 PHP 的 conf 文件位置,在此文 的部分已演示如何找;
- ⭕第 29 行的名称要与教程第一步中的 keys_zone 名称 xbnb 相同,如果你没改动第一步提供的配置范例,那么此处也不用改动;
- ⭕第 43 行的 X 替换为你自己服务器的真实 IP 地址;
- ⭕第 45 行的名称要与教程第一步中的 keys_zone 名称 xbnb 相同,如果你没改动第一步提供的配置范例,那么此处也不用改动;
最后检查 Nginx 的缓存是否生效
f12 查看网络的首页部分的响应头的 nginx-cache 是否是 HIT,如果是,则已经生效了
举一反三
同一个服务器的多个网站都开启 Nginx fastcgi_cache 缓存
就在已添加的 Nginx 配置基础上,再加一行代码,为第二个网站设置不同的 fastcgi_cache_path 路径和 keys_zone 名称 (大写),比如,可将第二个网站 fastcgi_cache_path 设置为 /tmp/wpcache2 将 keys_zone 设置为 lsposed
网站 配置
复制第一个网站的缓存配置,只需要将第 29 和 45 行的名称,改为 lsposed 也就是和 Nginx 配置新加的一行代码中的 keys_zone 名称相同,然后将修改好的网站配置文件,复制到第二个网站的配置中即可。
如果添加第三个网站,依次类推,为 Nginx 配置再加一行代码,以及将第三个网站的缓存配置中的第 29 和 45 行的名称,改为与 Nginx 配置新加代码中 keys_zone 名称相对应即可。
暂无评论内容