開啓簡單的緩存配置,只須要兩個指令:proxy_cache_path和proxy_cache。proxy_cache_path配置緩存的存放地址和其餘的一些經常使用配置,proxy_cache指令是爲了啓動緩存。nginx
proxy_cache_path /path/to/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m use_temp_path=off; server { # ... location / { proxy_cache mycache; proxy_pass http://my_upstream; } }
相關配置說明以下:緩存
(1)proxy_no_cachecookie
Syntax:proxy_no_cache string ...;
Default: —
Context: http , server , location
該指令用於定義知足條件的響應不會被保存到緩存中。在條件字符串中至少有一個條件不爲空或者0,符合這樣條件的響應纔不會被緩存。舉例以下:負載均衡
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
if ($request_uri ~ ^/(login|register|password\/reset)/) { set $cookie_nocache 1; }
proxy_no_cache $cookie_nocache(0) $arg_nocache(1) $arg_comment(0)
則不會被cache。`性能
注:通常會配合proxy_cache_bypass共同使用;Syntax: proxy_cache_bypass string ...; Default: — Context: http , server , location
Syntax: proxy_cache_key string; Default: proxy_cache_key $scheme$proxy_host$request_uri; Context: http, server, location
給緩存數據定義一個鍵,例如spa
proxy_cache_key 「$host$request_uri $cookie_user」;
默認狀況下,該指令的值的字符串線程
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
(4)proxy_cache_methods code
Syntax: proxy_cache_methods GET | HEAD | POST ...;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
該指令用於設置緩存哪些HTTP方法,默認緩存HTTP GET/HEAD方法,不緩存HTTP POST 方法.。server
(5)proxy_cache_validblog
Syntax: 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裏設置優先級更高的緩存有效時間:
(6)proxy_ignore_headers
Syntax: proxy_ignore_headers field ...;
Default: —
Context: http, server, location
(7)proxy_cache_min_uses指令
Syntax: proxy_cache_min_uses number; Default: proxy_cache_min_uses 1; Context: http, server, location
該指令用於設置緩存的最小使用次數,默認值爲1
location / {
...
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
}
如上配置表示,看成爲cache的NGINX收到源站返回error、timeout或者其餘指定的5XX錯誤,而且在其緩存中有請求文件的陳舊版本,則會將這些陳舊版本的文件而不是錯誤信息發送給客戶端。
# 咱們假設每塊硬盤掛載在相應的目錄中:/mnt/disk一、/mnt/disk二、/mnt/disk3 proxy_cache_path /mnt/disk1 levels=1:2 keys_zone=cache_1:256m max_size=1024G use_temp_path=off; proxy_cache_path /mnt/disk2 levels=1:2 keys_zone=cache_2:256m max_size=1024G use_temp_path=off; proxy_cache_path /mnt/disk3 levels=1:2 keys_zone=cache_3:256m max_size=1024G use_temp_path=off;
split_clients $request_uri $disk { 33.3% 1; 33.3% 2; * 3; } location / { proxy_pass http://backend; proxy_cache_key $request_uri; proxy_cache cache_$disk; }
在這份配置中,使用了3個獨立的緩存,每一個緩存專用一塊硬盤,另外,3個獨立的線程池也各自專用一塊硬盤。
緩存之間(其結果就是磁盤之間)的負載均衡使用split_clients模塊,split_clients很是適用於這個任務。
在 proxy_cache_path指令中設置use_temp_path=off,表示NGINX會將臨時文件保存在緩存數據的同一目錄中。這是爲了不在更新緩存時,磁盤之間互相複製響應數據。