- A+
在宝塔面板开启Nginx的fastcgi_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 的缓存是否生效
先退出登录以游客身份打开网站,或者用浏览器的隐身模式开网站。
右键 -> 检查 -> 浏览器控制台 -> 网络 -> 刷新 ->点击网址,显示 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 名称相对应即可。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫