目前,我们WordPress网站加速的时候较多通过硬件服务器的配置升级带宽升级,以及用一个 WordPress缓存插件,但是做这些往往是不够的。这里,我们还需要通过服务器性能的优化配合WordPress才可以最大化的优化网站的速度。这里,我们可以配合WordPress缓存插件的同时用到 Memcached 对象加速。
比如缓存插件我们可以用到当前主流的 WP Rocket。同时,我们可以利用 Cachify 插件开启 Memcached加速。
第一、检查服务器配置Memcached
既然我们需要用到 Memcached 缓存,那服务器需要配置 Memcached 组件。我们检查当前服务器的WEB环境,你是用宝塔面板的,还是LNMP一键包的,都根据设置要求部署 Memcached。
安装完毕后,我们可以检查看看当前的Memcached是否安装。
service memcached status
插件地址:https://wordpress.org/plugins/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 标识说明已经成功安装。然后我们可以在插件中设置取消缓存签名。
这样,我们又一个方法实现Memcached加速缓存,可以配合我们前面提到的”WordPress访问速度慢怎么办?使用WP Super Cache+Memcached加速方法“选择使用。
参考文章:利用Cachify缓存插件实现WordPress网站Memcached对象缓存