配置項
/path/to/cache : 本地路徑,緩存檔案存放位址;
levels : 預設所有緩存檔案都放在同一個/path/to/cache下,進而影響緩存的性能,大部分場景推薦使用2級目錄來存儲緩存檔案;
key_zone :在共享記憶體中設定一塊存儲區域來存放緩存的key和metadata(類似使用次數),這樣nginx可以快速判斷一個request是否命中或者未命中緩存,1m可以存儲8000個key,10m可以存儲80000個key;
max_size : 最大cache空間,如果不指定,會使用掉所有disk space,當達到配額後,會删除最少使用的cache檔案;
inactive : 未被通路檔案在緩存中保留時間,本配置中如果60分鐘未被通路則不論狀态是否為expired,緩存控制程式會删掉檔案,預設為10分鐘;“需要注意的是,inactive和expired配置項的含義是不同的,expired隻是緩存過期,但不會被删除,inactive是删除指定時間内未被通路的緩存檔案”;
use_temp_path : 如果為off,則nginx會将緩存檔案直接寫入指定的cache檔案中,而不是使用temp_path存儲,official建議為off,避免檔案在不同檔案系統中不必要的拷貝;
proxy_cache : 啟用proxy cache,指定key_zone;
附:緩存和代理中常用的配置項
上文講述了如何配置最基礎的proxy cache,接下來,會對常用的進階配置項進行梳理。
proxy_no_cache string;
Default: —
Context: http , server , location
config example:
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pragma $http_authorization;
$cookie_nocache a r g n o c a c h e . . . 皆 為 變 量 , 可 以 根 據 你 訪 問 的 匹 配 策 略 來 設 置 , 其 值 隻 有 2 類 , 0 和 非 0 ; 訪 問 匹 配 策 略 例 如 : i f ( arg_nocache...皆為變量,可以根據你通路的比對政策來設定,其值隻有2類,0和非0; 通路比對政策例如: if (arg
n
ocache...皆為變量,可以根據你通路的比對政策來設定,其值隻有2類,0和非0;通路比對政策例如:if(request_uri ~ ^/(login|register|password/reset)/) { set $cookie_nocache 1; }
如果在此鍊式配置中,隻要有一個值不為0,則不會cache;例如:proxy_no_cache $cookie_nocache(0) $arg_nocache(1) $arg_comment(0),不會被cache。`
注:一般會配合proxy_cache_bypass共同使用;
proxy_cache_bypass string;
Default: —
Context: http , server , location
config example:
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
定義在哪些情況下不從cache讀取,直接從backend擷取資源;配置方式同proxy_no_cache。
proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
自定義cache key,例如:
proxy_cache_key “h o s t hosthostrequest_uri $cookie_user”;
預設值為:
proxy_cache_key s c h e m e schemeschemeproxy_hostu r i uriuriis_args$args;
proxy_cache_methods GET| HEAD|POST…;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
指定用戶端那些方法被緩存,預設為GET|HEAD。
proxy_cache_purge string ...;
Default: —
Context: http, server, location
config example:
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
map $request_method $purge_method {
PURGE 1;
default 0;
}
server {
...
location / {
proxy_pass http://backend;
proxy_cache cache_zone;
proxy_cache_key $uri;
proxy_cache_purge $purge_method;
}
}
定義緩存清除場景,同proxy_no_cache,proxy_cache_bypass鍊式配置方式,隻要又一個不為0,則清除對應的cache key則會被清除,并傳回204 response。注意,這裡是删除記憶體中的cache key,而不是disk上的cache檔案!!!disk的cache檔案是由inactive控制;
當purege request的cache key以通配符*結束時,所有比對到通配符的cache入口的cachekey都會被删除。
proxy_cache_valid *[code...] time *;
Default: —
Context: http, server, location
設定不同相應碼的緩存時間,當不指定響應碼的時候,例如
proxy_cache_valid 5m;
隻對響應碼為200,301,302的通路請求資源設定緩存時間,此外可以個性化定制,例如:
proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid 404 1m; proxy_cache_valid any 1m;
此外,還可以在相應header裡設定優先級更高的緩存有效時間:
“X-Accel-Expires”,設定響應的緩存過期時間,以秒為機關;0為不緩存;
如果沒有設定“X-Accel-Expires” header,則關于緩存的配置政策可能會在“Expires”或者“Cache-Control” header中;
如果header含有“Set-Cookie”,則響應不會被緩存,類似的配置可以在“proxy_ignore_header”中可見;
header包含“Vary”并且設定為“*”,則請求不會被緩存,如果“Vary”有具體的值,則對應的請求會被緩存;
proxy_ignore_headers field;
Default: —
不緩存包含在field的響應header,可以設定的值有:“X-Accel-Redirect”, “X-Accel-Expires”, “X-Accel-Limit-Rate”,“X-Accel-Buffering”, “X-Accel-Charset”, “Expires”, “Cache-Control”, “Set-Cookie” (0.8.44), and “Vary”。
如果上述的header field沒有設定為忽略,則header filed中有“X-Accel-Expires”, “Expires”, “Cache-Control”, “Set-Cookie”, and “Vary”的話,響應會被緩存。
proxy_pass_headers field;
proxy_hide_headers field;
Default: —
Context: http, server, location
參考