nginx 反向代理之 proxy_cache


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那一行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM