WordPress巧用Nginx fastcgi_cache缓存加速,这个需要有一定的编程能力,如果你能看懂教程,那么可以按照教程跟着操作,Nginx fastcgi_cache需要编译Nginx ngx_cache_purge模块,此模块如何编译,请大家参考下面两大佬的教程,技术宅不多赘述。
1、《WordPress优化——利用Nginx fastcgi_cache缓存加速》
2、《Nginx开启fastcgi_cache缓存加速,支持html伪静态页面》
技术宅今天主要是针对Nginx配置文件,实现Nginx fastcgi_cache缓存加速,插件如何设置,多站点缓存如何设置,有兴趣的可以看看。
以下所有配置修改默认你已经编译了模块,且在/dev/shm/目录下创建了nginx-cache文件夹,可以使用以下命令创建:
mkdir /dev/shm/nginx-cache;
如果重启后该文件夹消失,请执行以下命令:
[ ! -d '/dev/shm/nginx-cache' ] && { mkdir /dev/shm/nginx-cache; chown -R ${user}.$user /dev/shm/nginx-cache; }
Nginx配置
1、请修改对应网站的Nginx配置文件,如果你使用的是宝塔面板,那么可以直接在对应的网站配置文件修改。将下面配置添加进网站对应配置文件的顶部。
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_path /dev/shm/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;#WORDPRESS 是可变参数,需要注意与service配置一致
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
2、请在servcie{}中添加以下内容,技术宅建议添加在 #error_page 502 /502.html#SSL-END或者#SSL-END下方:
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;
}
#如果需要对所有用户缓存,请将以上代码改为下方的,两段代码只可任选其一
#if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+") {
#set $skip_cache 1;
#}
#这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!关于sock,宝塔面板的在/www/server/php/74/etc/php-fpm.conf中有配置路径宝塔面板的sock
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi-74.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 WORDPRESS;#此处的WORDPRESS要和顶部的可变参数一致,否则会报错
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 WORDPRESS "$scheme$request_method$host$1";
}
以上注意sock的路径一定要和你的配置一致,否则会出现502错误,请手动修改为Nginx配置原来的,不要一味的粘贴。
代码添加完毕,在终端执行nginx -t,确定nginx没有报错再reload。
安装插件
我们需要去WordPress后台安装插件Nginx Helper,插件配置如下图:
底下的配置根据自己的需求来配置。技术宅这里选择的是Delete local server cache files,我们需要在网站根目录下的wp-config.php文件最底部添加以下内容:
define('RT_WP_NGINX_HELPER_CACHE_PATH','/dev/shm/nginx-cache');
主要是此插件默认的缓存路径是 /var/run/nginx-cache,所以需要改为我们Nginx中配置的路径。
完成以上配置,重载Nginx后,我们使用开发工具可以看到如下响应:
多站点设置
如果有多个站点使用Nginx fastcgi_cache,那么我们在nginx顶部配置的规则就要修改,将以下内容添加进Nginx主规则的顶部:
fastcgi_cache_key "$scheme$request_method$host$request_uri";
我们仅需要在对应网站的配置文件中配置:
fastcgi_cache_path /dev/shm/nginx-cache levels=1:2 keys_zone=WORDPRESS:100m inactive=60m;#WORDPRESS 是可变参数,需要注意与service配置一致
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
注意每个网站的keys_zone=后面的参数不能一样,否则会报错,参数还要和server{}中配置的fastcgi_cache 一致,大家要注意。
其他问题
启用fastcgi_cache缓存时,发现在Nginx配置文件中添加了Cache-Control信息,但是总是不生效。HTTP头部信息会总会包含以下信息:Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache
需要修改php.ini,将
session.cache_limiter=nocache
修改为:
session.cache_limiter=none
然后执行重载php即可。这个也能顺带解决WordPress健康工具提示检测到没有缓存,但是网站响应正常的提示。
以上就是WordPress巧用Nginx fastcgi_cache缓存加速的全部内容,希望有所帮助。