我们喜欢WordPress程序建站的一个理由肯定是拥有丰富的主题和插件,99%的功能都可以找到对应的插件和解决方案。比如我们在处理WordPress缓存加速问题上,有很多种解决方案,WordPress缓存插件都能找出来十几个,有免费的和付费的。今天老乐有和朋友在聊到他们最近用哪个缓存插件的时候有提到用 Cachify。这款插件我以前也有见过,可以选择 硬盘缓存或者开启Memcached。
对于Memcached对象缓存我们不是太陌生,前天我还有写过一篇「WordPress加速缓存实操过程之WP Super Cache+Memcached」文章,也是利用Memcached缓存插件实现的,相对来说需要更多一些手动设置。这不在这里,我们也详细的了解看看Cachify缓存插件的效果。
第一、检查服务器配置Memcached
既然我们需要用到 Memcached 缓存,那服务器需要配置 Memcached 组件。我们检查当前服务器的WEB环境,你是用宝塔面板的,还是LNMP一键包的,都根据设置要求部署 Memcached。
安装完毕后,我们可以检查看看当前的Memcached是否安装。
service memcached status
或者用 phpinfo 命令探针看看是否安装。
第二、安装Cachify插件激活缓存
既然我们已经安装完毕 Memcached,那就可以部署Cachify插件。
我们也可以直接在WordPress后台激活安装。
可以看到 Cachify 缓存防止有支持 数据库、硬盘、Memcached。对于这款插件设置还是很简单的,比如可以设置过期时间、缓存生成可排除登录用户。以及缓存限制页面和浏览器排除。如果要在源代码中显示 Cachify 信息,那就勾选 缓存签名,我们测试的时候可以开启。
最为主要的还是缓存方式,我们具体分析。
1、数据库缓存方式
这个方式很就简单,直接选择激活保存即可,无需其他设置。
缓存的标记直接存储在WordPress数据库中。这仍然加快了页面加载时间,因为不需要动态生成内容,而是直接加载先前生成的HTML标记。
2、硬盘缓存方式
如果选择硬盘作为缓存位置,cachefy将请求的博客页面生成的HTML代码存储在web服务器的硬盘上,每个网页一个HTML文件。服务器将重定向到适当的缓存文件。PHP解释器的启动被完全消除,这提供了额外的性能提升。
在Cachify设置中选择该选项之前,应该在WordPress目录wp-content中创建一个名为cache的新文件夹,权限为777。如果该路径已经存在,则只检查权限。插件将尝试自己创建文件夹,但如果发生错误,脚本将以提示结束。
Apache或Nginx web服务器控制浏览器的页面调用和现有缓存文件。这可以通过扩展Apache文件.htaccess或Nginx配置文件来实现。除了HTML版本的网页,Cachify还创建了一个GZIP压缩版本。服务器访问压缩文件,不会自己对内容进行耗时的压缩。这样可以节省CPU负载,因为文件已经压缩过了。
这里硬盘缓存方式还是有区别不同的WEB引擎的,如果我们用Apache引擎的话,还需要单独的配置.htaccess文件。
HTTP非加密方式:
# 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
HTTPS加密方式:
# BEGIN CACHIFY <IfModule mod_rewrite.c> # ENGINE ON RewriteEngine on RewriteBase / # set hostname directory RewriteCond %{HTTPS} on RewriteRule .* - [E=CACHIFY_HOST:https-%{HTTP_HOST}] RewriteCond %{HTTPS} off RewriteRule .* - [E=CACHIFY_HOST:%{HTTP_HOST}] # set subdirectory # sometimes %{REQUEST_URI} might be an empty string, so /$ won't match RewriteCond %{REQUEST_URI} /$ RewriteRule .* - [E=CACHIFY_DIR:%{REQUEST_URI}] RewriteCond %{REQUEST_URI} ^$ RewriteRule .* - [E=CACHIFY_DIR:/] # gzip RewriteRule .* - [E=CACHIFY_SUFFIX:] <IfModule mod_mime.c> RewriteCond %{HTTP:Accept-Encoding} gzip RewriteRule .* - [E=CACHIFY_SUFFIX:.gz] AddType text/html .gz AddEncoding gzip .gz </IfModule> # Main Rules RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{QUERY_STRING} ^$ RewriteCond %{REQUEST_URI} !^/(wp-admin|wp-content/cache)/.* RewriteCond %{HTTP_COOKIE} !(wp-postpass|wordpress_logged_in|comment_author)_ RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/cachify/%{ENV:CACHIFY_HOST}%{ENV:CACHIFY_DIR}index.html -f RewriteRule ^(.*) /wp-content/cache/cachify/%{ENV:CACHIFY_HOST}%{ENV:CACHIFY_DIR}index.html%{ENV:CACHIFY_SUFFIX} [L] </IfModule> # END CACHIFY
如果是Nginx引擎的话,需要修改站点的Nginx配置。
## 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、Memcached缓存方式
这里,我们还是建议用 Memcached缓存方式,这种只支持Nginx引擎,所以我们需要确定当前服务器用的是 Nginx引擎,虚拟主机一般是不支持的。
## 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; } ## NOCACHE LOCATION location @nocache { try_files $uri $uri/ /index.php?$args; }
同样的,需要配置Nginx站点的Nginx配置。
charset utf-8; 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 127.0.0.1:11211; } location @nocache { try_files $uri $uri/ /index.php?$args; }
这里,我们直接替换 WordPress.conf 文件。如果是我们当前服务器有其他要引用wordpress.conf,那就需要重新复制一份换个名字,然后引用,当然需要在 对应站点的.conf文件中修改引用wordpress.conf的名字。
设置完毕之后,我们需要 nginx -t
检查是否正常,然后重启 Nginx 生效。
查看源代码,我们可以看到上图的 Cachify 标识说明已经成功安装。然后我们可以在插件中设置取消缓存签名。
第三、文章总结
这篇文章中,我们完成可以用 Cachify 插件配置Nginx引擎中的WordPress站点来实现缓存加速用到 Memcached 对象缓存方式。这样是不是又学会一种缓存方式。
评论