利用Cachify插件實(shí)現(xiàn)WordPress網(wǎng)站Memcached對象緩存

麥子 運(yùn)維技術(shù)174字?jǐn)?shù) 5258閱讀17分31秒閱讀模式

我們喜歡WordPress程序建站的一個(gè)理由肯定是擁有豐富的主題和插件,99%的功能都可以找到對應(yīng)的插件和解決方案。比如我們在處理WordPress緩存加速問題上,有很多種解決方案,WordPress緩存插件都能找出來十幾個(gè),有免費(fèi)的和付費(fèi)的。今天老樂有和朋友在聊到他們最近用哪個(gè)緩存插件的時(shí)候有提到用 Cachify。這款插件我以前也有見過,可以選擇 硬盤緩存或者開啟Memcached。

對于Memcached對象緩存我們不是太陌生,前天我還有寫過一篇「WordPress加速緩存實(shí)操過程之WP Super Cache+Memcached」文章,也是利用Memcached緩存插件實(shí)現(xiàn)的,相對來說需要更多一些手動(dòng)設(shè)置。這不在這里,我們也詳細(xì)的了解看看Cachify緩存插件的效果。

第一、檢查服務(wù)器配置Memcached

既然我們需要用到 Memcached 緩存,那服務(wù)器需要配置 Memcached 組件。我們檢查當(dāng)前服務(wù)器的WEB環(huán)境,你是用寶塔面板的,還是LNMP一鍵包的,都根據(jù)設(shè)置要求部署 Memcached。

安裝完畢后,我們可以檢查看看當(dāng)前的Memcached是否安裝。

service memcached status

或者用 phpinfo 命令探針看看是否安裝。

第二、安裝Cachify插件激活緩存

既然我們已經(jīng)安裝完畢 Memcached,那就可以部署Cachify插件。

插件地址:https://wordpress.org/plugins/cachify/

我們也可以直接在WordPress后臺(tái)激活安裝。

可以看到 Cachify 緩存防止有支持 數(shù)據(jù)庫、硬盤、Memcached。對于這款插件設(shè)置還是很簡單的,比如可以設(shè)置過期時(shí)間、緩存生成可排除登錄用戶。以及緩存限制頁面和瀏覽器排除。如果要在源代碼中顯示 Cachify 信息,那就勾選 緩存簽名,我們測試的時(shí)候可以開啟。

最為主要的還是緩存方式,我們具體分析。

1、數(shù)據(jù)庫緩存方式

這個(gè)方式很就簡單,直接選擇激活保存即可,無需其他設(shè)置。

緩存的標(biāo)記直接存儲(chǔ)在WordPress數(shù)據(jù)庫中。這仍然加快了頁面加載時(shí)間,因?yàn)椴恍枰獎(jiǎng)討B(tài)生成內(nèi)容,而是直接加載先前生成的HTML標(biāo)記。

2、硬盤緩存方式

如果選擇硬盤作為緩存位置,cachefy將請求的博客頁面生成的HTML代碼存儲(chǔ)在web服務(wù)器的硬盤上,每個(gè)網(wǎng)頁一個(gè)HTML文件。服務(wù)器將重定向到適當(dāng)?shù)木彺嫖募HP解釋器的啟動(dòng)被完全消除,這提供了額外的性能提升。

在Cachify設(shè)置中選擇該選項(xiàng)之前,應(yīng)該在WordPress目錄wp-content中創(chuàng)建一個(gè)名為cache的新文件夾,權(quán)限為777。如果該路徑已經(jīng)存在,則只檢查權(quán)限。插件將嘗試自己創(chuàng)建文件夾,但如果發(fā)生錯(cuò)誤,腳本將以提示結(jié)束。

Apache或Nginx web服務(wù)器控制瀏覽器的頁面調(diào)用和現(xiàn)有緩存文件。這可以通過擴(kuò)展Apache文件.htaccess或Nginx配置文件來實(shí)現(xiàn)。除了HTML版本的網(wǎng)頁,Cachify還創(chuàng)建了一個(gè)GZIP壓縮版本。服務(wù)器訪問壓縮文件,不會(huì)自己對內(nèi)容進(jìn)行耗時(shí)的壓縮。這樣可以節(jié)省CPU負(fù)載,因?yàn)槲募呀?jīng)壓縮過了。

這里硬盤緩存方式還是有區(qū)別不同的WEB引擎的,如果我們用Apache引擎的話,還需要單獨(dú)的配置.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引擎的話,需要修改站點(diǎn)的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引擎,所以我們需要確定當(dāng)前服務(wù)器用的是 Nginx引擎,虛擬主機(jī)一般是不支持的。

## 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站點(diǎn)的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 文件。如果是我們當(dāng)前服務(wù)器有其他要引用wordpress.conf,那就需要重新復(fù)制一份換個(gè)名字,然后引用,當(dāng)然需要在 對應(yīng)站點(diǎn)的.conf文件中修改引用wordpress.conf的名字。

設(shè)置完畢之后,我們需要 nginx -t 檢查是否正常,然后重啟 Nginx 生效。

查看源代碼,我們可以看到上圖的 Cachify 標(biāo)識(shí)說明已經(jīng)成功安裝。然后我們可以在插件中設(shè)置取消緩存簽名。

第三、文章總結(jié)

這篇文章中,我們完成可以用 Cachify 插件配置Nginx引擎中的WordPress站點(diǎn)來實(shí)現(xiàn)緩存加速用到 Memcached 對象緩存方式。這樣是不是又學(xué)會(huì)一種緩存方式。

投上你的一票
 
  • 本文由 麥子 發(fā)表于 2024年8月15日 08:01:17
  • 轉(zhuǎn)載請務(wù)必保留本文鏈接:http://bjj.org.cn/cachify-memcached.html
  • Cachify緩存加速
  • WordPress優(yōu)化加速
  • Memcached對象緩存