利用Cachify缓存插件实现WordPress网站Memcached对象缓存

运维技术234字数 5255阅读17分31秒阅读模式

我们喜欢WordPress程序建站的一个理由肯定是拥有丰富的主题和插件,99%的功能都可以找到对应的插件和解决方案。比如我们在处理WordPress缓存加速问题上,有很多种解决方案,WordPress缓存插件都能找出来十几个,有免费的和付费的。今天老乐有和朋友在聊到他们最近用哪个缓存插件的时候有提到用 Cachify。这款插件我以前也有见过,可以选择 硬盘缓存或者开启Memcached。

对于Memcached对象缓存我们不是太陌生,前天我还有写过一篇「利用WP Super Cache+Memcached加速WordPress站点」文章,也是利用Memcached缓存插件实现的,相对来说需要更多一些手动设置。这不在这里,我们也详细的了解看看Cachify缓存插件的效果。

第一、检查服务器配置Memcached

既然我们需要用到 Memcached 缓存,那服务器需要配置 Memcached 组件。我们检查当前服务器的WEB环境,你是用宝塔面板的,还是LNMP一键包的,都根据设置要求部署 Memcached。

安装完毕后,我们可以检查看看当前的Memcached是否安装。

service memcached status

或者用 phpinfo 命令探针看看是否安装。

第二、安装Cachify插件激活缓存

既然我们已经安装完毕 Memcached,那就可以部署Cachify插件。

安装Cachify插件激活缓存

插件地址: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 标识说明已经成功安装。然后我们可以在插件中设置取消缓存签名。

第三、文章总结

这篇文章中,我们完成可以用 Cachify 插件配置Nginx引擎中的WordPress站点来实现缓存加速用到 Memcached 对象缓存方式。这样是不是又学会一种缓存方式。

投上你的一票
 
麦子
  • 本文由 麦子 发表于 2023年1月3日 08:08:33
  • 转载请务必保留本文链接:https://www.idcxen.com/cachify-memcached.html
  • Cachify缓存插件
  • WordPress加速缓存插件
  • WordPress Memcached加速