NGINX下fastcgi_cache模塊,使其實現(xiàn)緩存,效果的確不錯,易淘幫參考張戈的文章折騰了一番。
本文分享的 Nginx 緩存需要額外編譯 ngx_cache_purge 模塊。至于下載模塊、重新編譯以及平滑升級前文已經分享過了,本文就不再贅述了。不會的朋友可以參考下文:
- cd ~/lnmp/src
- wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz
- tar xzf ngx_cache_purge-2.1.tar.gz
- cd nginx-1.8.0 #你的nginx解壓目錄,版本號根據(jù)你自己的版本號定義。
- make clean
- ./configure --prefix=/usr/local/nginx --user=www --group=www --add-module=../ngx_cache_purge-2.3 \
- --with-http_stub_status_module \
- --with-http_spdy_module \
- --with-http_ssl_module --with-ipv6 \
- --with-http_gzip_static_module \
- --with-http_realip_module \
- --with-http_flv_module \
- --with-ld-opt=-ljemalloc
- make
- mv /usr/local/nginx/sbin/nginx{,$(date +%m%d)}
- cp objs/nginx /usr/local/nginx/sbin
- service nginx resatrt
- mkdir -p /var/nginx/cache/one
- chown -R www.www /var/nginx
為網站開啟Nginx緩存加速,支持html偽靜態(tài)頁面
要用這個緩存功能,建議重新弄一個 server 模塊(替換之前的),如下代碼是張戈博客目前正在使用的規(guī)則(已刪除了我自定義的偽靜態(tài)規(guī)則,避免混淆視聽):
- ####################################################################################################
- # Nginx開啟fastcgi_cache-purge緩存加速,支持html偽靜態(tài)頁面 By 張戈博客
- # 文章地址:http://zhangge.net/5042.html ?
- # 參 考 ①:http://jybb.me/nginx-wordpress-fastcgi_cache-purge
- # 參 考 ②:https://rtcamp.com/wordpress-nginx/tutorials/single-site/fastcgi-cache-with-purging/
- # 轉載本文請務必保留以上申明,謝謝合作!
- ####################################################################################################
- #下面各個參數(shù)的含義請自行百度,我就不贅述了
- #下面2行的中的wpcache路徑請自行提前創(chuàng)建,否則可能會路徑不存在而無法啟動nginx,max_size請根據(jù)分區(qū)大小自行設置
- fastcgi_cache_path /tmp/cache/wpcache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
- fastcgi_temp_path /tmp/cache/wpcache/temp;
- fastcgi_cache_key "$scheme$request_method$host$request_uri";
- fastcgi_cache_use_stale error timeout invalid_header http_500;
- #忽略一切nocache申明,避免不緩存?zhèn)戊o態(tài)等
- fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
- server
- {
- listen 80;
- #請修改為自己的域名
- server_name zhangge.net;
- index index.html index.htm index.php default.html default.htm default.php;
- #請修改為自己網站的存放路徑
- root /home/wwwroot/zhangge.net;
- set $skip_cache 0;
- #post訪問不緩存
- if ($request_method = POST) {
- set $skip_cache 1;
- }
- #動態(tài)查詢不緩存
- if ($query_string != "") {
- set $skip_cache 1;
- }
- #后臺等特定頁面不緩存(其他需求請自行添加即可)
- if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
- set $skip_cache 1;
- }
- #對登錄用戶、評論過的用戶不展示緩存(這個規(guī)則張戈博客并沒有使用,所有人看到的都是緩存)
- if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
- set $skip_cache 1;
- }
- #這里請參考你網站之前的配置,特別是sock的路徑,弄錯了就502了!
- location ~ [^/]\.php(/|$)
- {
- try_files $uri =404;
- fastcgi_pass unix:/tmp/php-cgi.sock;
- fastcgi_index index.php;
- include fastcgi.conf;
- #新增的緩存規(guī)則
- fastcgi_cache_bypass $skip_cache;
- fastcgi_no_cache $skip_cache;
- add_header X-Cache "$upstream_cache_status From $host";
- fastcgi_cache WORDPRESS;
- fastcgi_cache_valid 200 301 302 1d;
- }
- location / {
- #此處可以添加自定義的偽靜態(tài)規(guī)則(之前你新增的偽靜態(tài)規(guī)則可以添加到這,沒有就不用了)
- try_files $uri $uri/ /index.php?$args;
- rewrite /wp-admin$ $scheme://$host$uri/ permanent;
- }
- #緩存清理配置(可選模塊,請細看下文說明)
- location ~ /purge(/.*) {
- allow 127.0.0.1;
- allow "此處填寫你服務器的真實外網IP";
- deny all;
- fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
- }
- location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
- access_log off; log_not_found off; expires max;
- }
- location = /robots.txt { access_log off; log_not_found off; }
- location ~ /\. { deny all; access_log off; log_not_found off; }
- #請注意修改日志路徑
- access_log /home/wwwlogs/zhangge.net.log access;
- }
請仔細閱讀代碼中的所有注釋,該修改的修改,該創(chuàng)建的創(chuàng)建,該補充的根據(jù)實際情況補充,否則使用之后又來找張戈吐槽各種問題了!
上文已經提到了 fastcgi_cache 有一個量身定做的WordPress緩存清理插件:Nginx Helper
所以,接下來我們就去安裝這個插件 。非常簡單,直接進入WordPress后臺插件安裝界面搜索 Nginx Helper 關鍵詞在線安裝即可。
安裝后,從后臺【工具】==>【Nginx Helper】打開插件設置界面如下所示:
Ps:順帶說一下后面2項的含義:
記錄插件日志:勾選這個選項后,插件設置下面會顯示日志記錄存放路徑。這個功能主要用來測試插件的設置,比如去已緩存的文字發(fā)表一個新的評論,然后看下日志里面是否出現(xiàn)刪除記錄。
插入緩存信息:勾選這個選項后,前臺頁面的源代碼底部將插入頁面的緩存信息,類似如下:
- <!--Cached using Nginx-Helper on 2015-05-30 12:34:22. It took 162 queries executed in 1.922 seconds.-->
- <!--Visit http://wordpress.org/extend/plugins/nginx-helper/faq/ for more details-->
勾上第啟用緩存清理后,將出現(xiàn)如下選項:
該怎么設置,應該看圖就懂了吧?否則張戈苦逼的用中文標注了半天就白費功夫了!
上圖我也標注的比較清楚了,還是詳細解釋一下吧!
①、purge模式
這個模式需要保留上文 Nginx 配置中的 purge 清理路徑,清理的時候會產生一個請求。
出于安全考慮,一般 purge 都不會完全開放!只有特定的 IP 可以訪問,所以,如果用了CDN的朋友,再使用模式一,則需要在服務器上的hosts中強制一個真實IP,沒搞懂的話就放棄這個模式吧。
②、文件模式
模式二是直接清理對應的緩存文件,不需要請求 purge這個清理路徑,所以使用模式二,不需要配置上文 Nginx 的 purge 規(guī)則(我個人推薦使用這個模式)。
由于插件作者定義的緩存路徑是 /var/run/nginx-cache ,而我們可能會根據(jù)服務器實際情況來自定義緩存路徑,這樣一來,緩存路徑的不同就會導致插件無法找到緩存文件并刪除!
很簡單,在WordPress根目錄下的wp-config.php中新增如下代碼即可:
- //根據(jù)實際情況定義緩存的存放路徑
- define( 'RT_WP_NGINX_HELPER_CACHE_PATH','/tmp/cache/wpcache');
Ps:不知道添加到第幾行的話,可以添加到 define('WPLANG', 'zh_CN'); 的后面即可。添加后建議重載一下php,確保變量生效(主要針對開啟了PHP緩存的網站)。
①、緩存效果
替換新的配置,并且重載Nginx之后,訪問前臺頁面,查看header,會多出一個X-Cache 標志。
X-Cache 一般會有3個狀態(tài):MISS、HIT、BYPASS。
MISS表示未命中
即這個頁面還沒被緩存,新發(fā)布或剛被刪除的頁面,首次訪問將出現(xiàn)這個狀態(tài)(圖略)。
HIT表示緩存命中
打開一個會緩存的頁面,比如文章內容html頁面,F(xiàn)5刷新幾次即可在F12開發(fā)者模式當中的Header頭部信息中看到如圖緩存命中狀態(tài):
BYPASS表示緩存黑名單
即頁面路徑在Nginx規(guī)則中被設置成不緩存(set $skip_cache 1;),比如WP后臺,查看header:
②、清理效果
這個插件和緩存的搭配非常好用,不管我們是發(fā)布文章,還是有人發(fā)表評論,插件都能根據(jù)我們的設置來清理對應的緩存!比如有人發(fā)表了一個自動審核通過的評論(或博主審核通過一條評論),插件將會自動刪除評論相關的文章緩存,具體看下上圖張戈貼出的標注即可。
如何查看插件是否正常工作呢?很簡單,勾選開啟插件日志,然后去點擊更新一篇舊文章,最后打開插件日志即可看到是否刪除記錄。
用Linux的朋友,可以直接使用tailf命令查看該日志,然后去更新文章即可看到效果,如下圖所示:
很明顯,緩存已被成功刪除,首頁看都不用看,肯定也是這個狀態(tài)了。