WordPress利用fastcgi_cache开启Nginx缓存加速,支持多站点并行

自然 2019年8月3日12:56:32 2

自然博客自2019年1月份就已经使用了Nginx缓存方案。Nginx缓存方案的优势在于效率高,不拖累网站速度,关于wordoress自然一直坚持能不用插件解决的问题就坚决不使用插件。本次更新只是做归档,关于开启Nginx缓存的方案见《Nginx安装ngx_cache_purge缓存模块加速网站-wordpress实例记录》。本次更新在于将ngx_cache_purge模块的安装与Nginx站点配置文件的分离,以及引入一些可以偷懒的安装办法。

Wordpress利用fastcgi_cache开启Nginx缓存加速,支持多站点并行

上一篇文章我们已经介绍过ngx_cache_purge模块的安装,这里不做太多赘述。

修改站点配置文件

这里以自然博客的conf文件为例,省略部分是日常配置,为了节省代码长度所以不做展示。

#下面各个参数的含义请自行百度,我就不赘述了
#下面2行的中的wpcache路径请自行提前创建,否则可能会路径不存在而无法启动nginx,max_size请根据分区大小自行设置
fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=wpcache:250m inactive=1d max_size=1G;
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;
#忽略一切nocache申明,避免不缓存伪静态等
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
server
    {
 listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name www.wanvi.net wanvi.net;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/www.wanvi.net;
  #-----------------------常用配置部分省略-----------------------
#自定义缓存配置部分开始
  
   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(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/tmp/php-cgi.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";
    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 wpcache;
    fastcgi_cache_valid 200 301 302 1d;
  }
  
  #缓存清理配置(可选)
  location ~ /purge(/.*) {
    allow 127.0.0.1;
    #此处填写你的服务器IP
    allow 8.8.8.8;
    deny all;
    #请注意此处的WORDPRESS要与上面的keys_zone保持一致
    fastcgi_cache_purge wpcache "$scheme$request_method$host$1";
    }
#自定义缓存配置部分结束
    #-----------------------常用配置部分省略-----------------------
    }

如果你是多站点配置,只需要在新站点的nginx配置文件的server上面添加一行代码即可。

fastcgi_cache_path /tmp/wpcache2 levels=1:2 keys_zone=wpcache2:250m inactive=1d max_size=1G; 
server { 
以下内容省略

fastcgi_cache_path为缓存存储位置,需要预先创建好;

key_zone是缓存区名,每个站点需要唯一。

我们使用nginx -t检查配置文件是否正确,如果正确重新载入nginx配置刷新站点即可看见html头部关于缓存的说。

Wordpress利用fastcgi_cache开启Nginx缓存加速,支持多站点并行

注意事项

key_zone缓存区名是与缓存存储位置一一对应的,缓存区名需要添加在 fastcgi_cache后面,用于定义该站点的缓存存储位置。

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 wpcache;
 fastcgi_cache_valid 200 301 302 1d;

安装Nginx Helper插件-自动刷新缓存

通过上面的方法我们已经配置好了fastcgi_cache缓存,那我们如何刷新缓存呢?这里我们需要借助到wordoress的Nginx Helper插件,实现文章、评论、页面更新时刷新必要的缓存区域。

Wordpress利用fastcgi_cache开启Nginx缓存加速,支持多站点并行

Wordpress利用fastcgi_cache开启Nginx缓存加速,支持多站点并行

由于插件作者定义的缓存路径是 /var/run/nginx-cache ,而我们可能会根据服务器实际情况来自定义缓存路径,这样一来,缓存路径的不同就会导致插件无法找到缓存文件并删除!

我们需要在wp-config.php文件中定义新的缓存位置:

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

重启Nginx服务我们可以看到缓存已经生成了

Wordpress利用fastcgi_cache开启Nginx缓存加速,支持多站点并行

如果你发现你的评论过的用户依然用的是缓存,那应该是WP没有记住cookie,把以下代码加入到functions.php 中即可。

add_action('set_comment_cookies','coffin_set_cookies',10,3);
function coffin_set_cookies( $comment, $user, $cookies_consent){
   $cookies_consent = true;
   wp_set_comment_cookies($comment, $user, $cookies_consent);
}

总结

Nginx直接读取预先缓存的网页内容可以极大的提升服务器响应速度,增加用户体验。这篇文章写的非常简要,如果你在配置中遇到什么问题,可以找自然一起交流。我非常乐意帮助各位站长解决实际问题。

weinxin
网科文媒
快来关注一下,你想要的这里都有喔!
自然

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

    • avatar 明月登楼 2

      过来支持一下!
      话说有些缩略图载入失败了!显示空白呀!