proxy_cache將從C上獲取到的數據根據預設規則存放到B上(內存+磁盤)留着備用,
A請求B時,B會把緩存的這些數據直接給A,而不需要再去向C去獲取。
proxy_cache相關功能生效的前提是,需要設置proxy_buffering on;
proxy_cache主要參數:
1. proxy_cache 語法:proxy_cache zone|off 默認為off,即關閉proxy_cache功能,zone為用於存放緩存的內存區域名稱。 例:proxy_cache my_zone; 從nginx 0.7.66版本開始,proxy_cache機制開啟后會檢測被代理端的HTTP響應頭中的"Cache-Control"、"Expire"頭域。 如,Cache-Control為no-cache時,是不會緩存數據的。 2. proxy_cache_bypass 語法:proxy_cache_bypass string; 該參數設定,什么情況下的請求不讀取cache而是直接從后端的服務器上獲取資源。 這里的string通常為nginx的一些變量。 例:proxy_cahce_bypass $cookie_nocache $arg_nocache$arg_comment; 意思是,如果$cookie_nocache $arg_nocache$arg_comment這些變量的值只要任何一個不為0或者不為空時, 則響應數據不從cache中獲取,而是直接從后端的服務器上獲取。 3. proxy_no_cache 語法:proxy_no_cache string; 該參數和proxy_cache_bypass類似,用來設定什么情況下不緩存。 例:proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; 表示,如果$cookie_nocache $arg_nocache $arg_comment的值只要有一項不為0或者不為空時,不緩存數據。 4. proxy_cache_key 語法:proxy_cache_key string; 定義cache key,如: proxy_cache_key $scheme$proxy_host$uri$is_args$args; (該值為默認值,一般不用設置) 5. proxy_cache_path 語法:proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size] path設置緩存數據存放的路徑; levels設置目錄層級,如levels=1:2,表示有兩級子目錄,第一個目錄名取md5值的倒數第一個值,第二個目錄名取md5值的第2和3個值。
keys_zone設置內存zone的名字和大小,如keys_zone=my_zone:10m
inactive設置緩存多長時間就失效,當硬盤上的緩存數據在該時間段內沒有被訪問過,就會失效了,該數據就會被刪除,默認為10s。
max_size設置硬盤中最多可以緩存多少數據,當到達該數值時,nginx會刪除最少訪問的數據。
proxy_cache示例:
http { ...; proxy_cache_path /data/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g; ...; server { listen 80; server_name www.aminglinux.com; proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 2 4k; proxy_busy_buffers_size 4k; proxy_temp_path /tmp/nginx_proxy_tmp 1 2; proxy_max_temp_file_size 20M; proxy_temp_file_write_size 8k; location / { proxy_cache my_zone; proxy_pass http://192.168.10.110:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
說明:核心配置為proxy_cache_path那一行。