我們喜歡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插件。
我們也可以直接在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ì)一種緩存方式。
評論