nginx三大功能(之三緩存功能)

從整體來看,nginx的緩存cache總共有五種,接下來分別來介紹每一種緩存的機制以及各自的特色:css

1.傳統緩存之一html

該方法是將nginx的404錯誤頁面定位到後端,而後在使用poxy_store將後端返回的頁面進行保存。java

location/{nginx

root/home/html;#主目錄web

expires 1d;#網頁的過時時間shell

error_page 404=200/fetch$request_uri;#404界面定向到fetch目錄下數據庫

}後端

location  /fetch{#404界面定向到該路徑下緩存

internal;#指明該目錄下不能再外部直接訪問服務器

expires:1d :#網頁訪問過時時間

alias/home/html;#虛擬目錄文件系統要和location /同樣,proxy_store會將文件保存到這個目錄下面

proxy_pass:http://javaDevelopment.com;#後端upstream地址,/fetch同時是一個代理

proxy_set_header Accept-Encoding'';#爲了使得後端不要返回壓縮的內容

proxy_store on ;#指定nginx代理返回的文件保存

proxy_temp_path /home/tmp;#臨時目錄,該目錄必定要和/home/html放到同一磁盤分區中

}

使用的時候還要確保nginx要有權限在/home/tmp和/home/html下面有寫入文件的權限,直接使用chmod 777進行受權便可。

2.傳統緩存之二

原理同上,可是使用更簡潔一些,以下:

location /{

root/home/html;

proxy_store on;

proxy_set_header  Accept-Encoding'';

poxy_temp /home/tmp;

if(!-f $request_filename)

    {

proxy_pass http://javaDevelopMent.com;

    }

}

該配置屬性代碼比較少,使用!-f來判斷請求的文件系統上存不存在,若是不存在就使用proxy_pass到後端去,一樣返回的是proxy_store保存。

該兩種方式有着一樣的優缺點:

缺點1:不支持帶參數的動態連接,同時也不支持一級目錄和二級目錄同時緩存,nginx會把二級目錄認爲跟一級目錄是同一個連接,因此會保存失敗,在這種狀況下都須要寫rewrite才能正確保存。

缺點2:nginx內部沒有緩存過時和任何清理的任何機制,這些緩存的文件將永遠的保存在服務器上。若是不及時的清理,必定程度上硬盤中將沒法存儲多的文件,須要寫shell腳本進行定時的清理。

缺點3:nginx服務器上智能緩存status爲200的,後端返回的301,302,404狀態的都不會緩存。

缺點4:nginx不會自動選擇內存或硬盤做爲存儲介質,一切有配置決定。

3.基於memcached

nginx對memcached也會支持

location  /mem/{

if ($uri~"^/mem/([0-9A-Za-z_]*$)"){

set $memcached_key "$1";

memcached_pass 192.168.9.12:11211

}

expires 120;

}

該配置會將http://javaDevelopMent.com/mem/java指明到memcached的java這個key去取數據

nginx目前沒有寫入memcached的任何機制,所以要往memcached中寫入數據須要用動態語言來完成,可使用404定向到後端寫入數據中。

4.基於第三方插件ncache

ncache是基於web服務器模型構建起來的緩存系統,屬於sina公司的開源產品。

起初的目的是爲了提高緩存響應速度而開發的,而squid(磁盤緩存)的速度比較慢,ncache的優點就在於此。

ncache最先的時候是做爲nginx的一個HTTP模塊進行開發的,由於考慮到其以後的兼容性和可擴展性,做爲更好的獨立模塊,能夠普遍的推廣和使用。但後來隨着功能的擴充,代碼的增多,nginx原有的框架異能不能知足開發中的需求,所以採用提取nginx內部核心代碼,並把cache部分嵌入其中,就造成了今天的ncache。

ncache徹底是一套定製化的產品,能夠知足快速部署、簡單易用,高併發、大存儲量的需求,它不須要複雜的配置。

直接安裝便可。

運行ncache的命令

/usr/local/webserver/nacahe/sbin/nginx

中止nacahe命令

killall -9 nginx

查看ncache狀態

curl  "http://127.0.0.1/ncache_state"

ncache後端內容服務器設置

(1)必須使用Http Head頭「Cache-Controll:max-age=秒數」來控制緩存時間,若是不指定將不緩存。

(2)後端內容源服務器發送ncache的Http數據,必須帶有「Content-Length」Header頭部。

(3)ncache的緩存時間以分鐘爲單位,會將全部max-age=秒數轉換成分鐘數,若是max-age小於1分鐘,ncache將默認將緩存時間設置成1分鐘。

(4)自動刪除緩存文件進程,會在天天的凌晨兩點刪除大約20%的不活動緩存數據。

ncache能夠對數據進行快速和線性可擴展的分佈式緩存,減小對數據庫的訪問。ncache能夠幫助消除數據庫的性能瓶頸,擴展java應用程序的事務處理極限。

ncache2.0版本,是做爲一個完整的nginx模塊進行發佈和使用的,在原有的內核上進行了剝離,更方便開發者的安裝和配置。

5.proxy_cache功能(新功能)

從nginx-0.7.44版本開始,nginx支持相似squid較爲正規的cache功能,目前還處於開發階段,這個緩存是把連接用MD5編碼hash後保存,所以支持任意連接,也支持404/301/302非正常狀態。

首先配置一個cache空間

proxy_cache_path   /javaDevelopMent.com/to cache

levels=1:2 keys_zone=java1:10M inactive=5m max_size=2M  celan_time=1m;

proxy_temp_path參數路勁也要跟proxy_cache_path在一個分區上

以上配置參數說明;

levels:指定該緩存空間有兩層hash目錄,第一層爲1個字母,第二層爲2個字母;

keys_zone:爲空間起名字  10M指空間大小

inactive=5m指默認緩存時間5分鐘

max_size=2M文件最大超過2M就不緩存

celan_time=1m指定一分鐘清理一次

綜合起來以下:

location ~.*\.(js|css|gif|jpg|jpeg|png|bmp|swf|flv)$

{

proxy_pass :http://backend;

expires 6h;

proxy_cache  java1;//使用java1這個keys_zone

proxy_cache_vaild 200 302 1h;

proxy_cache_vaild 301 1d;

proxy_cache_vaild  any  1m;

}

注:支持緩存的cache0.7.44和0.7.51之間的這個版本穩定性均有問題,這幾個版本不建議在生產環境中使用,0.7.39位目前最穩定的版本,建議使用。

相關文章
相關標籤/搜索