詳解ngx_cache_purge _proxy_cache指令使用
目錄
- 1. proxy_cache 指令
- 2. proxy_cache_bypass指令
- 3. proxy_cache_key指令
- 4. proxy_cache_lock指令
- 5. proxy_cache_lock_timeout指令
- 6. proxy_cache_min_uses指令
- 7. proxy_cache_path指令
- 8. proxy_cache_use_stale指令
- 9. proxy_cache_valid指令
- 10. proxy_no_cache
- 11. proxy_store 指令
- 12. proxy_store_access指令
1. proxy_cache 指令
該指令用于配置一塊公用的內(nèi)存區(qū)域的名稱,該區(qū)域可以存放緩存的索引數(shù)據(jù)。這些數(shù)據(jù)在Nginx服務(wù)器啟動(dòng)時(shí)由緩存索引重建進(jìn)程負(fù)責(zé)建立,在Nginx服務(wù)器的整個(gè)運(yùn)行過程中由緩存管理進(jìn)程負(fù)責(zé)定時(shí)檢測過期數(shù)據(jù),檢索等管理工作。
proxy_cache zone | off;
zone,設(shè)置的用于存放緩存索引的內(nèi)存區(qū)域的名稱。
off,關(guān)閉proxy_cache 功能,是默認(rèn)的設(shè)置。
2. proxy_cache_bypass指令
該指令用于配置Nginx服務(wù)器向客戶端發(fā)送響應(yīng)數(shù)據(jù)時(shí),不從緩存中獲取的條件。這些條件支持使用Nginx 配置的常用變量。
proxy_cache_bypass string …;
string為條件變量,支持設(shè)置多個(gè),當(dāng)至少有一個(gè)字符串指令不為空或者不等于О時(shí),響應(yīng)數(shù)據(jù)不從緩存中獲取。
看一個(gè)例子: proxy_cache _bypass $cookie_nocache $arg nocache $Sarg_comment
$http_pragma $http.authorization;
其中,Scookie_nocache、Sarg_nocache、Sarg_comment、Shttp_pragma
和Shttp_authorization 都是Nginx配置文件的變量,
3. proxy_cache_key指令
該指令用于設(shè)置Nginx服務(wù)器在內(nèi)存中為緩存數(shù)據(jù)建立索引時(shí)使用的關(guān)鍵字
proxy cache key string;
string為設(shè)置的關(guān)鍵字,支持變量。
如果我們希望緩存數(shù)據(jù)包含服務(wù)器主機(jī)名稱等關(guān)鍵字,則可以將該指令設(shè)置為:
proxy_cache_key “s c h e m e schemeschemehost$request”;
4. proxy_cache_lock指令
該指令用于設(shè)置是否開啟緩存的鎖功能。在緩存中,某些數(shù)據(jù)項(xiàng)可以同時(shí)被多個(gè)請求返回的響應(yīng)數(shù)據(jù)填充。開啟該功能后,Nginx服務(wù)器同時(shí)只能有一個(gè)請求填充緩存中的某一數(shù)據(jù)項(xiàng),這相當(dāng)于給該數(shù)據(jù)項(xiàng)上鎖,不允許其他請求操作。其他的請求如果也想填充該項(xiàng),必須等待該數(shù)據(jù)項(xiàng)的鎖被釋放。這個(gè)等待時(shí)間由
proxy_cache_lock_timeout 指令配置。
proxy_cache_lock on | off;
默認(rèn)情況下為關(guān)閉
5. proxy_cache_lock_timeout指令
該指令用于設(shè)置緩存的鎖功能開啟以后鎖的超時(shí)時(shí)間。具體細(xì)節(jié)參見proxy_cache_lock 指令的相關(guān)內(nèi)容
proxy cache_ lock_timeout time;
其中,time為設(shè)置的時(shí)間,默認(rèn)為5s。
6. proxy_cache_min_uses指令
該指令用于設(shè)置客戶端請求發(fā)送的次數(shù),當(dāng)客戶端向被代理服務(wù)器發(fā)送相同請求達(dá)到該指令設(shè)定的次數(shù)后,Nginx服務(wù)器才對該請求的響應(yīng)數(shù)據(jù)做緩存。合理設(shè)置該值可以有效地降低硬盤上緩存數(shù)據(jù)的數(shù)量,并提高緩存的命中率。
proxy_cache_min_uses number;
其中,number為設(shè)置的次數(shù)。默認(rèn)設(shè)置為1。
7. proxy_cache_path指令
該指令用于設(shè)置Nginx服務(wù)器存儲(chǔ)緩存數(shù)據(jù)的路徑以及和緩存索引相關(guān)的內(nèi)容
proxy_cache_path [levels=levels] keys_zone=name:sizel [inactive=time1] [max_size=size2][loader_files=number] [loader_sleep=time2][loader_threshold-time3];
- path,設(shè)置緩存數(shù)據(jù)存放的根路徑,該路徑應(yīng)該是預(yù)先存在于磁盤上的。levels,設(shè)置在相對于path指定目錄的第幾級(jí)hash目錄中緩存數(shù)據(jù)。
- levels=1:表示一級(jí)hash目錄;levels=1:2,表示兩級(jí),依次類推。目錄的名稱是基于請求URL通過哈希算法獲取到的。
- name:sizel,Nginx服務(wù)器的緩存索引重建進(jìn)程在內(nèi)存中為緩存數(shù)據(jù)建立索引,這一對變量用來設(shè)置存放緩存索引的內(nèi)存區(qū)域的名稱和大小。
- timel,設(shè)置強(qiáng)制更新緩存數(shù)據(jù)的時(shí)間,當(dāng)硬盤上的緩存數(shù)據(jù)在設(shè)定的時(shí)間內(nèi)沒有被訪問時(shí),Nginx服務(wù)器就強(qiáng)制從硬盤上將其刪除,下次客戶端訪問該數(shù)據(jù)時(shí)重新緩存。該指令默認(rèn)設(shè)置為10s。
- size2、設(shè)置硬盤中緩存數(shù)據(jù)的大小限制。我們知道,硬盤中的緩存源數(shù)據(jù)由Nginx服務(wù)器的緩存管理進(jìn)程進(jìn)行管理,當(dāng)緩存的大小超過該變量的設(shè)置時(shí),緩存管理進(jìn)程將根據(jù)最近最少被訪問的策略刪除緩存。
- number,設(shè)置緩存索引重建進(jìn)程每次加載的數(shù)據(jù)元素的數(shù)量上限。在重建緩存索引的過程中,進(jìn)程通過一系列的遞歸遍歷讀取硬盤上的緩存數(shù)據(jù)目錄及緩存數(shù)據(jù)文件,對每個(gè)數(shù)據(jù)文件中的緩存數(shù)據(jù)在內(nèi)存中建立對應(yīng)的索引,我們稱每建立一個(gè)索引為加載一個(gè)數(shù)據(jù)元素。進(jìn)程在每次遍歷過程中可以同時(shí)加載多個(gè)數(shù)據(jù)元素,該值限制了每次遍歷中同時(shí)加載的數(shù)據(jù)元素的數(shù)量。默認(rèn)設(shè)置為100。
- time2,設(shè)置緩存索引重建進(jìn)程在一次遍歷結(jié)束、下次遍歷開始之間的暫停時(shí)長。默認(rèn)設(shè)置為50ms.
- time3,設(shè)置遍歷一次磁盤緩存源數(shù)據(jù)的時(shí)間上限。默認(rèn)設(shè)置為200ms
該指令設(shè)置比較復(fù)雜,一般需要設(shè)置前面三個(gè)指令的情形比較多,后面的幾個(gè)變量與Nginx服務(wù)器緩存索引重建進(jìn)程及管理進(jìn)程的性能相關(guān),一般情況下保持默認(rèn)設(shè)置就可以了。我們來看幾個(gè)簡單的配置實(shí)例:
proxy_cache path /nginx/cache/a levels=1 keys_zone=a:10m; proxy_cache_path /nginx/cache /b levels-2:2 keys_zone=b:100m; proxy _cache_path /nginx/cache/c levels=1:1:2 keys_zone=c:1000m;
8. proxy_cache_use_stale指令
如果Nginx在訪問被代理服務(wù)器過程中出現(xiàn)被代理的服務(wù)器無法訪問或者訪問錯(cuò)誤等現(xiàn)象時(shí),Nginx服務(wù)器可以使用歷史緩存響應(yīng)客戶端的請求,這些數(shù)據(jù)不一定和被代理服務(wù)器上最新的數(shù)據(jù)相一致,但對于更新頻率不高的后端服務(wù)器來說,Nginx服務(wù)器的該功能在一定程度上能夠?yàn)榭蛻舳颂峁┎婚g斷訪問。該指令用來設(shè)置一些狀態(tài),當(dāng)后端被代理的服務(wù)器處于這些狀態(tài)時(shí),Nginx服務(wù)器啟用該功能。
該指令可以支持的狀態(tài)如語法結(jié)構(gòu)中所示。
proxy_cache_use_stale error| timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off..·:
9. proxy_cache_valid指令
該指令可以針對不同的HTTP響應(yīng)狀態(tài)設(shè)置不同的緩存時(shí)間
proxy_cache_valid [code…] time;
- code,設(shè)置HTTP響應(yīng)的狀態(tài)代碼。該指令可選,如果不設(shè)置,Nginx服務(wù)器只為HTTP狀態(tài)代碼為200、301和302的響應(yīng)數(shù)據(jù)做緩存。可以使用“any”表示緩存所有該指令中未設(shè)置的其他響應(yīng)數(shù)據(jù)。
- time,設(shè)置緩存時(shí)間。看幾個(gè)例子:
proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m;
上述例子中,對返回狀態(tài)為200和302的響應(yīng)數(shù)據(jù)緩存10分鐘,對返回狀態(tài)為301的響應(yīng)數(shù)據(jù)緩存1小時(shí),對返回狀態(tài)為非200、302和301的響應(yīng)數(shù)據(jù)緩存1分鐘。
10. proxy_no_cache
該指令同于配置在什么情況下不使用cache功能
proxy_no_cache $string…;
string 可以是一個(gè)或者都多個(gè)變量。當(dāng)string的值不為空或者不為0時(shí),不啟用cache功能
11. proxy_store 指令
該指令配置是否在本地磁盤緩存來自被代理服務(wù)器的響應(yīng)數(shù)據(jù)。這是Nginx服務(wù)器提供的另一種緩存數(shù)據(jù)的方法,但是該功能相對 Proxy
Cache簡單一些,它不提供緩存過期更新、內(nèi)存索引建立等功能,不占用內(nèi)存空間,對靜態(tài)數(shù)據(jù)的效果比較好。
proxy_store on | off | string;
- on | off,設(shè)置是否開啟ProxyStore功能。如果使用變量on,功能開啟,緩存文件會(huì)存放到alias指令或root指令設(shè)置的本地路徑下。默認(rèn)設(shè)置為off。
- string,自定義緩存文件的存放路徑。如果使用變量string,Proxy Store功能開啟,緩存文件會(huì)存放到指定的本地路徑下。
Proxy Store方法多使用在被代理服務(wù)器端發(fā)生錯(cuò)誤的情況下,用來緩存被代理服務(wù)器的響應(yīng)數(shù)據(jù)。
12. proxy_store_access指令
該指令用于設(shè)置用戶或用戶組對Proxy Store緩存的數(shù)據(jù)的訪問權(quán)限
proxy_store_access users:permissions …
- users,可以設(shè)置為user、group或者all。
- permissions,設(shè)置權(quán)限。
有關(guān)Proxy Store方法的使用,我們通過官方給出的實(shí)例加深理解,在該實(shí)例中筆者通過注釋對配置做了說明:
location /images/ { ? root /data/www; ? error_page 404 = /fetch$uri; ? ? ?#定義了404錯(cuò)誤的請求頁面 } location /fetch/ ? ? ? ? ? ? ? ? ? ?#匹配404錯(cuò)誤時(shí)的請求 { ? proxy_pass http://backend; ? proxy_store on; ? ? ? ? ? ? ? ? ? #開啟Proxy store方法 ? proxy_store_access user:rw group:rw all:r; ? root/data/www; ? ? ? ? ? ? ? ? ? ?#緩存數(shù)據(jù)的路徑 }
到此這篇關(guān)于詳解ngx_cache_purge _proxy_cache指令使用的文章就介紹到這了,更多相關(guān)ngx_cache_purge _proxy_cache指令內(nèi)容請搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
