nginx nginx快取cache的幾種方式

2021-09-02 06:22:45 字數 2758 閱讀 3835

nginx快取cache的幾種方式

官方詳細引數:

1、傳統快取之一(404)

這個辦法是把nginx的404錯誤定向到後端,然後用proxy_store把後端返回的頁面儲存。

location /

location /fetch/

使用的時候還有要注意是nginx要有許可權往/home/tmp和/home/html下有寫入檔案的許可權,在linux下nginx一般會配置成 nobody使用者執行,這樣這兩個目錄就要chown nobody,設成nobody使用者專用,當然也可以chmod 777,不過所有有經驗的系統管理員都會建議不要隨便使用777。

2、傳統快取之二(!-e)

原理和404跳轉基本一致,但更簡潔一些:

location /

}可以看到這個配置比404節約了不少**,它是用!-f來判斷請求的檔案在檔案系統上存不存在,不存在就proxy_pass到後端,返回同樣是用proxy_store儲存。

兩種傳統快取都有著基本一樣的優點和缺點:

缺點1:不支援帶引數的動態鏈結,比如read.php?id=1,因為nginx只儲存檔名,所以這個鏈結只在檔案系統下儲存為read.php,這樣使用者訪問read.php?id=2時會返回不正確的結果。同時不支援這種形式的首頁和二級目錄http: 因為nginx非常老實,會將這樣的請求照鏈結寫入檔案系統,而這個鏈結顯然是乙個目錄,所以儲存失敗。這些情況都需要寫rewrite才能正確儲存。

缺點2:nginx內部沒有快取過期和清理的任何機制,這些快取的檔案會永久性地儲存在機器上,如果要快取的東西非常多,那就會撐暴整個硬碟空間。為此可以使用乙個shell指令碼定期清理,同時可以撰寫php等動態程式來做實時更新。

缺點4:nginx不會自動選擇記憶體或硬碟作為儲存介質,一切由配置決定,當然在當前的作業系統裡都會有作業系統級的檔案快取機制,所以存在硬碟上也不需要過分擔心大併發讀取造成的io效能問題。

nginx 傳統快取的缺點也是它和squid等快取軟體的不同之特色,所以也可看作其優點。在生產應用中它常常用作和squid的搭檔,squid 對於帶?的鏈結往往無法阻擋,而nginx能將其訪問攔住,例如:?和在squid上會被當做兩個鏈結,所以會造成兩次穿透;而nginx只會儲存一次,無論鏈結變成?1還是?123,均不能透過nginx快取,從而有效地保護了後端主機。

nginx會非常老實地將鏈結形式儲存到檔案系統中,這樣對於乙個鏈結,可以很方便地查閱它在快取機器上的快取狀態和內容,也可以很方便地和別的檔案管理器如rsync等配合使用,它完完全全就是乙個檔案系統結構。

這兩種傳統快取都可以在linux下將檔案儲存到/dev/shm裡,一般我也是這麼做的,這樣可以利用系統記憶體來做快取,利用記憶體的話,清理過期內容速度就會快得多。使用/dev/shm/時除了要把tmp目錄也指向到/dev/shm這個分割槽外,如果有大量小檔案和目錄,還要修改一下這個記憶體分割槽的 inode數量和最大容量:

mount -o size=2500m -o nr_inodes=480000 -o noatime,nodiratime -o remount /dev/shm

上面的命令在一台有3g記憶體的機器上使用,因為/dev/shm預設最大記憶體是系統記憶體的一半就是1500m,這條命令將其調大成2500m,同時 shm系統inode數量預設情況下可能是不夠用的,但有趣的是它可以隨意調節,這裡調節為480000保守了點,但也基本夠用了。

3、基於memcached的快取

nginx對memcached有所支援,但是功能並不是特別之強,效能上還是非常之優秀。

location /mem/

expires 70;

}這個配置會將mem/abc指明到memcached的abc這個key去取資料。

nginx目前沒有寫入memcached的任何機制,所以要往memcached裡寫入資料得用後台的動態語言完成,可以利用404定向到後端去寫入資料。

4、基於第三方外掛程式ncache

5、nginx新開發的proxy_cache功能

從nginx-0.7.44版開始,nginx支援了類似squid較為正規的cache功能,目前還處於開發階段,支援相當有限,這個快取是把鏈結用md5編碼hash後儲存,所以它可以支援任意鏈結,同時也支援404/301/302這樣的非200狀態。

配置:首先配置乙個cache空間:

proxy_cache_path /xok/to/cache levels=1:2 keys_zone=xok1:10m inactive=5m max_size=2m clean_time=1m;

proxy_temp_path引數路徑也需要跟上面的proxy_cache_path在乙個分割槽上,否則會報錯。

注意這個配置是在server標籤外,levels指定該快取空間有兩層hash目錄,第一層目錄是1個字母,第二層為2個字母,儲存的檔名就會類似 /xok/to/cache/e/4a/0f1019b0db2f97d17c2238c0271a74ae;keys_zone為這個空間起個名字,10m指空間大小為10mb;inactive的5m指快取預設時長5分鐘;max_size的2m是指單個檔案超過2m的就不快取;clean_time指定一分鐘清理一次快取。

location /

綜合起來可以簡單優化靜態檔案:

注意:支援cache的0.7.44到0.7.51這幾個版本的穩定性均有問題,訪問有些鏈結會出現錯誤,所以這幾個版本最好不要在生產環境中使用。 nginx-0.7下目前所知較為穩定的版本是0.7.39。穩定版0.6.36版也是近期更新,如果在配置裡沒有使用到0.7的一些新標籤新功能,也可以使用0.6.36版。

大數運算 附c ac題解

就是這樣一類題,兩個數字太大了直接用數字型別不太好運算,我們就直接用字串來計算。題目描述 川哥可謂是我校acm起家的鼻祖,雖然早已畢業卻特別關注這次科技節的校賽,特意囑咐,一定會a b的大數加法!輸入多行測試資料,每行包含兩個正整數a和b,a和b的範圍不會超過1000位 輸出輸出a b的結果 樣例輸...

《nginx》 Nginx配置詳解

nginx是lgor sysoev為俄羅斯訪問量第二的rambler.ru站點設計開發的。從2004年發布至今,憑藉開源的力量,已經接近成熟與完善。nginx功能豐富,可作為http伺服器,也可作為反向 伺服器,郵件伺服器。支援fastcgi ssl virtual host url rewrite...

Nginx Nginx效能優化

在大多數情況下,乙個常規安裝的nginx對 來說已經能很好地工作了。然而如果想擠壓出nginx的效能,就需要了解哪些指令會影響nginx效能,在本文中將解釋nginx的哪些設定可以微調。需要注意一點,這是乙個簡單的預覽 那些可以通過微調來提高效能設定的概述,不同的環境可能情況不太一樣。對於nginx...