利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

自然
自然
自然
384
文章
438
评论
2019年11月10日11:37:08 4 6893字阅读22分58秒

wordpress优化加速无非在于服务器选择、缓存的应用、静态分离等步骤上下功夫,国内服务器性能瓶颈基本集中在宽带容量上面,而国外服务器瓶颈主要集中在宽带路由上面。小容量的宽带,以及超高的延迟一直制约着用户体验。在这些都已经无法改变的前提下,我们可以优化服务器来提升一定的速度。

我们通常会使用到缓存,将页面缓存到硬盘当中以降低服务器负载和提升访问速度,降低用户端等待时间TTFB。如果硬盘性能不佳,而内存很大的话,我们可以采用终极加速方案,直接把内容缓存到内存当中去。这里我们讲一下利用Cachify插件将WordPress页面缓存到Memcached实现优化加速。

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

自然博客一些常用的加速方法可以给各位站长参考一下:

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

2 #wp-rocket配合nginx实现纯静态化加速wordpress,Rocket-Nginx

3 #网站优化加速-开启Brotli压缩加速网站传输

服务器配置Memcached

Cachify插件:

  1. 下载:https://wordpress.org/plugins/cachify/
  2. 开源:https://github.com/pluginkollektiv/cachify/wiki

Cachify插件支持把静态内容缓存到 WordPress 数据库,硬盘,APC(PHP 缓存)或者 Memcached 中,缓存到数据库最为简单,但是一般建议缓存到Memcached,利用服务器内存存储和读取速度才是最快的。

如果你的用的是Oneinstack或者LNMP一键包,或者是宝塔BT面板,直接使用脚本一键安装和配置Memcached,虚拟主机一般来说不支持Memcached,但是主流主机面板都是支持该服务的。

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

二、Cachify插件安装启用

到Wordpress后台直接搜索Cachify插件即可安装,启用Cachify插件后界面如下图:(点击放大)

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

三、调用Cachify缓存加速

      3.1 数据库缓存

如果你在Cachify插件中选择了使用数据库Database作为你的页面缓存,无需其它的操作,直接保存后就可以使用了。

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

      3.2 PAC缓存

如果你使用APC缓存来调用Cachify,你需要按照下面的要求修改你的.htaccess或者是Nginx配置文件:

#.htaccess example (Apache):
<Files index.php>
    php_value auto_prepend_file /absolute path to/plugins/cachify/apc/proxy.php
</Files>
#Example for nginx instances:
location ~ .php {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param PHP_VALUE auto_prepend_file=/absolute path to/plugins/cachify/apc/proxy.php;
    location ~ /wp-admin/ {
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param PHP_VALUE auto_prepend_file=;
    }
}

      3.3硬盘缓存

如果你是想让Cachify将缓存页面放在你的硬盘上,你需要按照下面的要求来修改你的.htaccess或者是Nginx配置文件:

#A description for only https and sites that are accessible via https and http follows below.
#Extension of the .htaccess (Apache), if the website is only accessible via http: (https://gist.github.com/sergejmueller/2027249#file-htaccess)
#.htaccess extension for websites that can be reached under both http and https: (https://gist.github.com/mcguffin/31f80070d631d56da23cefb4ef1b6649)
# BEGINN CACHIFY
<IfModule mod_rewrite.c>
    # ENGINE ON
    RewriteEngine On
    # GZIP FILE
    <IfModule mod_mime.c>
        RewriteCond %{REQUEST_URI} /$
        RewriteCond %{REQUEST_URI} !^/(wp-admin|wp-content/cache)/.*
        RewriteCond %{REQUEST_METHOD} !=POST
        RewriteCond %{QUERY_STRING} =""
        RewriteCond %{HTTP_COOKIE} !(wp-postpass|wordpress_logged_in|comment_author)_
        RewriteCond %{HTTP:Accept-Encoding} gzip
        RewriteCond %{DOCUMENT_ROOT}/path to/wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html.gz -f
        RewriteRule ^(.*) /path to/wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html.gz [L]
        AddType text/html .gz
        AddEncoding gzip .gz
    </IfModule>
    # HTML FILE
    RewriteCond %{REQUEST_URI} /$
    RewriteCond %{REQUEST_URI} !^/(wp-admin|wp-content/cache)/.*
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{HTTP_COOKIE} !(wp-postpass|wordpress_logged_in|comment_author)_
    RewriteCond %{DOCUMENT_ROOT}/path to/wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html -f
    RewriteRule ^(.*) /path to/wp-content/cache/cachify/%{HTTP_HOST}%{REQUEST_URI}index.html [L]
</IfModule>
# END CACHIFY
#Nginx configuration file extension (https://gist.github.com/sergejmueller/1939164#file-gistfile1-nginxconf)
## GZIP
gzip_static on;
 
## CHARSET
charset utf-8;
 
## INDEX LOCATION
location / {
    if ( $query_string ) {
        return 405;
    }
    if ( $request_method = POST ) {
        return 405;
    }
    if ( $request_uri ~ /wp-admin/ ) {
        return 405;
    }
    if ( $http_cookie ~ (wp-postpass|wordpress_logged_in|comment_author)_ ) {
        return 405;
    }
    error_page 405 = @nocache;
    try_files /wp-content/cache/cachify/https-${host}${uri}index.html /wp-content/cache/cachify/${host}${uri}index.html @nocache;
}
 
## NOCACHE LOCATION
location @nocache {
    try_files $uri $uri/ /index.php?$args;
}
 
## PROTECT CACHE
location ~ /wp-content/cache {
    internal;
}

3.4Memcached缓存

如果你是想要使用Memcached来缓存你的页面,你需要按照下面的要求修改你的Nginx配置文件:(该模式仅支持Nginx):

#Extension of the Nginx configuration file (https://gist.github.com/sergejmueller/6113816#file-gistfile1-txt)
#If you have errors please try to change memcached_pass localhost:11211; to memcached_pass 127.0.0.1:11211; This forces IPv4 because some servers that allow ipv4 and ipv6 are configured to bind memcached to ipv4 only.
## GZIP
gzip_static on;
## CHARSET
charset utf-8;
## INDEX LOCATION
location / {
    error_page 404 405 = @nocache;
 
    if ( $query_string ) {
        return 405;
    }
    if ( $request_method = POST ) {
        return 405;
    }
    if ( $request_uri ~ "/wp-" ) {
        return 405;
    }
    if ( $http_cookie ~ (wp-postpass|wordpress_logged_in|comment_author)_ ) {
        return 405;
    }
    default_type text/html;
    add_header X-Powered-By Cachify;
    set $memcached_key $host$uri;
    memcached_pass localhost:11211;
}
location @nocache {
    try_files $uri $uri/ /index.php?$args;
}

该配置规则仅仅是官方给出的示例,你需要根据你自己的Nginx配置情况来适当调整,这里给出Qi大佬的Nginx配置规则,仅供参考(采用Oneinstack架构):

#因oneinstack加载了Wordpress重写规则,故直接在wordpress.conf中修改
location / {
 #注释掉原有的重写规则
 #try_files $uri $uri/ /index.php?$args;
  
  #启用Cachify开始
   error_page 404 405 = @nocache;
 
    if ( $query_string ) {
        return 405;
    }
    if ( $request_method = POST ) {
        return 405;
    }
    if ( $request_uri ~ "/wp-" ) {
        return 405;
    }
    if ( $http_cookie ~ (wp-postpass|wordpress_logged_in|comment_author)_ ) {
        return 405;
    }
    default_type text/html;
    add_header X-Powered-By Cachify;
    set $memcached_key $host$uri;
    memcached_pass 127.0.0.1:11211;
   #启用Cachify结束
  
}
#启用Cachify开始
location @nocache {
    try_files $uri $uri/ /index.php?$args;
}
#启用Cachify结束
#以下为原配置规则,继续保留
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* ^/wp-content/uploads/.*\.php$ {
  deny all;
}

我们还可以指定不缓存页面,例如我们可以增加对所有的移动设备用户不启用缓存,这个功能在全站使用了AMP时特别有用,规则如下:

#启用Cachify开始
charset utf-8;
#启用Cachify结束
location / {
 #try_files $uri $uri/ /index.php?$args;
 
 #启用Cachify开始
   error_page 404 405 = @nocache;
 
    if ( $query_string ) {
        return 405;
    }
    if ( $request_method = POST ) {
        return 405;
    }
  
  #移动端不缓存
  if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
    {    
       return 405;
    }
  #移动端不缓存
  
    if ( $request_uri ~ "/wp-" ) {
        return 405;
    }
    if ( $http_cookie ~ (wp-postpass|wordpress_logged_in|comment_author)_ ) {
        return 405;
    }
    default_type text/html;
    add_header X-Powered-By Cachify;
    set $memcached_key $host$uri;
    memcached_pass 127.0.0.1:11211;
   #启用Cachify结束
  
   
}
#启用Cachify开始
location @nocache {
    try_files $uri $uri/ /index.php?$args;
}
#启用Cachify结束
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* ^/wp-content/uploads/.*\.php$ {
  deny all;
}

四、Memcached缓存管理

4.1 更新缓存

Cachify插件允许你在更新一篇文章是清空所有的Memcached缓存,还是仅清空某页面的Memcached缓存。

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

4.2 手动删除

在Wordpress后台右上角可以手动一键删除Memcached缓存。

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

4.3 查看缓存

在Wordpress后台可以直接查看和更新Cachify插件缓存配置。

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

五、Cachify缓存加速效果

5.1 确认缓存生效

打开网页源代码,可以看到:<!-- Cachify | http://cachify.de Memcached @ 31.08.2019 01:22:51 -->等字样,表示该页面是由Cachify缓存生成的。

利用Cachify插件将WordPress页面缓存到Memcached实现优化加速

加速效果

使用Memcached作为缓存后首页打开,浏览器的TTFB时间大大降低,从最初的790ms降低到了190ms,加速效果非常明显,与未启用Cachify Memcached缓存加速相比,时间缩短了一倍以上。

总结

为了达到Cachify插件最大化的Wordpress优化加速效果,建议使用Memcached缓存加速方式,它相对于使用数据库或者硬盘,直接在内存中写入和读取缓存,速度快了不少。

内存速度很快,什么后往里面扔速度必然很快。前提是你的服务器内存足够大。一般情况自然还是建议缓存到硬盘上面,现在服务器几乎都配备了NVME SSD硬盘,性能还是非常给力的。

udemy course free downloadfree download udemy coursefree download wordpress pluginswordpress plugins nulledudemy tutorial free downloadwordpress themes crackedwordpress themes nulledwordpress plugins crackedwordpress themes crackeddownload wordpress themes
weinxin
自然博客
快来关注一下,一个linux运维爱好者的个人博客!
自然
  • 本文由 发表于 2019年11月10日11:37:08
WP-China-Yes自建wordpress中国区仓库源 Nginx

WP-China-Yes自建wordpress中国区仓库源

WordPress的CDN在19年被国内攻击后(存疑),一直屏蔽了大陆IP的访问,从大陆访问WP的服务都会返回429 Too Many Requests。虽然WP官方社区并不承认屏蔽了大陆地区的访问(...
匿名

发表评论

匿名网友 填写信息

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

评论:4   其中:访客  2   博主  2
    • 缙哥哥 缙哥哥 5

      这个和WordPress插件库中的Memcached插件有啥区别?

        • 自然 自然

          @ 缙哥哥 这个你可以理解为我们所使用的FastCgi缓存方式,区别只是以Memcached的方式将缓存写入到内存中

        • 简单生活 简单生活 3

          各种缓存插件五花八门,应该差不多吧!🤪

            • 自然 自然

              @ 简单生活 选一种自己喜欢,好用的就行了。环境稳定性排第一