OpenResty 开启 Redis 拓展加速 WordPress

前言

很多个人博主都选择WordPress来作为自己的博客,因为WP拥有相当丰富的插件主题资源。但是WordPress是一个非常臃肿的系统,过度依赖于数据库和PHP的处理性能。我们有很多的办法来优化他,使它运行的更为迅速。本篇文章,我们讲解下如何使用 OpenResty + Redis 搭建一个高速缓存体系来加速 WordPress博客。

与Redis插件的区别

很多人对于Redis并不陌生,因为在很多的优化WordPress的教程中都提到了使用WP-Redis来缓存数据库。但是这个过程仍然需要处理一部分PHP程序,才会去执行Redis的规则。本篇文章中,我们采用的服务器前端是 OpenResty ,装载Redis插件,能够在还未处理PHP的时候读取缓存,达到将优化做到最前端的效果。速度会比传统的 Redis插件更快一等。

准备

  • OpenResty
  • Redis

这里我以在Oneinstack一键包安装的程序做例子,也推荐大家使用,非常方便。

修改 nginx.conf

首先准备修改nginx.conf,命令:

vim /usr/local/openresty/nginx/conf/nginx.conf

然后找到其中的

http{

}

在http{}中间插入 Redis的服务器配置:

upstream redis {
            server 127.0.0.1:6379;
            keepalive 512;
    }

保存之后我们去修改虚拟主机配置文件,这里我以我的博客为例:

vim /usr/local/openresty/nginx/conf/vhost/blog.ipatrick.cn.conf

找到其中的

server {

}

在 server{}当中插入以下代码:

    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;
    }
 
   location /redis-fetch {
        internal  ;
        set  $redis_key $args;
        redis_pass  redis;
    }
 
    location /redis-store {
        internal  ;
        set_unescape_uri $key $arg_key ;
        redis2_query set $key $echo_request_body;
        redis2_query expire $key 14400; 
        redis2_pass  redis;
    } 

然后在文件中找到处理 PHP的部分,按照下面的代码 修改 他,让他检测是否能命中缓存代替PHP的执行

location ~ .*\.(php|php5)?$ {
        set $key "nginx-cache:$scheme$request_method$host$request_uri";
        try_files $uri =404;
 
        srcache_fetch_skip $skip_cache;
        srcache_store_skip $skip_cache;
 
        srcache_response_cache_control off;
 
        set_escape_uri $escaped_key $key;
 
        srcache_fetch GET /redis-fetch $key;
        srcache_store PUT /redis-store key=$escaped_key;
 
        more_set_headers 'X-Cache $srcache_fetch_status';
        more_set_headers 'X-Store $srcache_store_status';
        
        #下面这些不用添加,按照Oneinstack默认配置即可
        #fastcgi_pass remote_php_ip:9000;
        fastcgi_pass unix:/dev/shm/php-cgi.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
    }

安装缓存清理插件

重启OpenResty即可生效,但是还有一个缺点就是当我们发布新文章,修改文章,通过评论,修改评论时无法自动更新缓存。WordPress插件Nginx Helper可以当我们发布新文章,修改文章,通过评论,修改评论自动清理缓存。

进入WordPress插件安装页面,搜索 Nginx Helper。

安装完成按照下图配置此插件,保存即可。

OpenResty 开启 Redis 拓展加速 WordPress

 

总结

在开启Redis缓存之后,发现速度明显提高,缓存命中率也非常高。因为是依靠着 OpenResty运行,所以网站从刚刚接受到访问请求就去请求缓存,而不必去执行PHP,速度较插件来说要快一些。

原创文章,作者:雨落无声,如若转载,请注明出处:https://www.zhujiboke.com/2017/03/233.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论列表(13条)

  • 老猫
    老猫 2017年7月13日 上午11:39

    这个可以识别手机端的响应式主题分别缓存吗,如果不能,手机访问可能会变成电脑版的,那就很糟糕了

  • Aimer
    Aimer 2017年5月3日 下午5:54

    不知道这个的效果和ngx_cache_purge模块+Nginx-helper的静态html缓存那个更快

    • 雨落无声
      雨落无声 回复 Aimer 2017年5月3日 下午10:14

      Redis是基于内存的,所以内存的读写速度你懂的。

      ngx_cache储存的文件如果是缓存在硬盘上,当然没有内存快~ 不过你要是把ngx_cache的缓存文件放在内存里,速度都差不多吧。

    • Aimer
      Aimer 回复 雨落无声 2017年5月4日 上午11:22

      Redis可以看做一种动态缓存,对于服务器RAM要求比较高,如果每天访问人数比较多的话,服务器负载就上去了,相比较ngx_cache是放在硬盘上的,会降低服务器的动态计算。
      可以说两者都有好处吧|ω・)

  • 雨巷
    雨巷 2017年3月24日 上午12:33

    手贱去OpenResty的官网装了个这个。。然后发现和oneinstack不能并存。。。哭瞎

    • 雨落无声
      雨落无声 回复 雨巷 2017年3月24日 上午6:45

      Oneinstack不是默认就带了OpenResty嘛……

    • 雨巷
      雨巷 回复 雨落无声 2017年3月24日 下午2:33

      心好累。。。我又重装了,google快照找了一篇文章。。。

    • 雨巷
      雨巷 回复 雨巷 2017年3月24日 下午6:11

      这个未知操作系统是什么鬼。。。。家里的Mac 啊 ➡

    • 雨落无声
      雨落无声 回复 雨巷 2017年3月24日 下午7:18

      貌似主流的系统支持里没有对Mac的支持…..

  • 雨巷
    雨巷 2017年3月24日 上午12:06

    按照博主教程做的,感觉一般啊。。。没有特别大的差别。。。 😥

    • 雨落无声
      雨落无声 回复 雨巷 2017年3月24日 上午6:46

      我感觉速度是非常快的..比我用php的wpredis插件快很多..当然如果你觉得没什么卵用的话,还是换回来吧,看个人体验。

  • Leonn
    Leonn 2017年3月2日 下午1:10

    回头搭建的时候,试试这个0.0

    • 雨落无声
      雨落无声 回复 Leonn 2017年3月2日 下午3:23

      嘿嘿嘿~ 😀

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息