BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

利用Nginx fastcgi_cache缓存,直接使用Nginx为页面生成缓存来加速wordpress,而且还支持html伪静态页面,效率比使用PHP缓存插件要高得多,也比较适合小配置的VPS上使用。

宝塔面板很贴心的给我们编译好了这个模块,如果你不放心,可以用命令来查看一下。

nginx -V 2>&1 | grep -o ngx_cache_purge

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

显示结果有ngx_cache_purge。还可以用Nginx -V查看宝塔面板是否已经编译好了?注:Nginx -V中的V是大写。

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

Nginx开启fastcgi_cache缓存-配置实例

这边采用多站点的,建议大家将下面的代码放到 nginx.conf 里,这样便于统一管理,提高多站点管理的效率,单站点的话请自便。宝塔面板的话,找到“软件商店”下软件名称为“Nginx 1.160”右边的设置,点击后选择“配置修改”,找到http{ }在这里面添加以下代码

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

#站点 1 缓存配置
fastcgi_cache_path /tmp/tanxiang levels=1:2 keys_zone=TANXIANG:128m inactive=1d max_size=1G;
#站点 2 缓存配置
#如果要开启更多站点缓存,请继续增加,注意每个站点的 缓存路径 和 keys_zone 要自定义区分一下
#Ps:代码中的参数都只是范例,实际使用请根据服务器配置自行修改
fastcgi_cache_path /tmp/meiwencun levels=1:2 keys_zone=MEIWEN:128m inactive=1d max_size=1G;
#其他配置可以不变
fastcgi_temp_path /tmp/wpcache; #上面这些目录都需要手动提前创建好
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
#忽略一切 nocache 申明,避免不缓存伪静态等
fastcgi_hide_header Pragma; #不对从被代理服务器传来的应答进行转发
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

注意:/tmp/tanxiang、/tmp/meiwencun、/tmp/wpcache这三个目录要先创建。

上述配置做了以下工作:

  1. 设置缓存池信息(fastcgi_cache_path);
  2. 设置缓存key(fastcgi_cache_key);
  3. 过期文件处理(fastcgi_cache_use_stale);
  4. 缓存策略(fastcgi_cache_bypass/fastcgi_no_cache);
  5. 后端请求成功时缓存时间(fastcgi_cache_valid);
  6. 增加了调试信息头(add_header);

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

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

然后分别是各个站点的conf文件中添加以下代码,宝塔面板的话,找到“网站”下需要添加的“网站名”右边设置,打开窗口后,选择“配置文件”,在server{ }中添加以下代码,最好放在 root /www/wwwroot/meiwencun下面,如下。

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

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-56.sock;  #php版本不一样,这边也会不一样
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 MEIWEN;
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 MEIWEN "$scheme$request_method$host$1";
}

其中keys_zone、fastcgi_cache、fastcgi_cache_purge 设置的名称要一样,名称是自定义的。key_zone是缓存区名,每个站点需要唯一。

allow “此处填写你的服务器IP”;这边双引号要去掉,然后改为解析的IP。

而fastcgi_pass unix:的值宝塔面板的在/www/server/php/56/etc/php-fpm.conf中有配置路径宝塔面板的sock。

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

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

安装Nginx Helper插件

配置好了fastcgi_cache缓存之后,我们需要安装插件, fastcgi_cache 有一个量身定做的 WordPress 缓存清理插件:Nginx Helper。这个插件不定时更新,而且更新的很频繁。安装这个插件 ,非常简单,直接进入 WordPress 后台插件安装界面搜索 Nginx Helper 关键词在线安装即可。

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

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

清理模式选择

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

①、purge 模式

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

②、文件模式

模式二是直接清理对应的缓存文件,不需要请求 purge 这个清理路径,所以使用模式二,不需要配置上文 Nginx 的 purge 规则(我个人推荐使用这个模式)。由于插件作者定义的缓存路径是 /tmp/meiwencun,而我们可能会根据服务器实际情况来自定义缓存路径,这样一来,缓存路径的不同就会导致插件无法找到缓存文件并删除!

所以,我们可以在 WordPress 根目录下的 wp-config.php 中新增如下代码即可,

//根据实际情况定义缓存的存放路径
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/tmp/meiwencun');

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

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

这些全部操作好,重启一下Nginx,即可生效。

Nginx fastcgi_cache效果检测

访问前台页面,查看header,会多出一个X-Cache 标志。

X-Cache 一般会有3个状态:MISS、HIT、BYPASS。

  1. MISS表示未命中
    即这个页面还没被缓存,新发布或刚被删除的页面,首次访问将出现这个状态。
  2. HIT表示缓存命中
    打开一个会缓存的页面,比如文章内容html页面,F5刷新几次即可在F12开发者模式当中的Header头部信息中看到如图缓存命中状态。
    BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站
  3. BYPASS表示缓存黑名单
    即页面路径在Nginx规则中被设置成不缓存(set $skip_cache 1;),比如WP后台,查看header。

状态如第2点所示,HIT表示缓存命中,而且缓存目录里面也有产生缓存文件,如下图所示。说明Nginx fastcgi_cache有效果。

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

注:启用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即可。宝塔面板的话,找到“软件商店”下软件名称为“php-5.6”右边的设置,点击后选择“配置修改”,找到session.cache_limiter代码值改为none

BT宝塔面板Nginx fastcgi_cache缓存加速WordPress网站

正文完
 0