總結一下 proxy cache 設置的常用指令及使用方法:
- proxy_cache
proxy_cache zone | off
配置一塊公用的內存區域的名稱,該區域可以存放緩存的索引數據。注意:zone 代表用於存放緩存索引的內存區域的名稱(需要使用 proxy_cache_path指令設置);off 代表關閉Proxy Cache功能
- proxy_cache_path
proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time1] [max_size=size2] [loader_files=number] [loader_sleep=time2] [loader_threshold=time3];
設置nginx服務器存儲緩存數據的路徑以及和緩存索引相關的內容
path,設置緩存數據存放的根路徑
levels,設置在相對path路徑的第幾級hash目錄中緩存數據。levels=1,表示一級hash目錄;levels=1:2,表示兩級,依次類推
name:size,設置存放緩存索引的內存區域名稱的大小 例如 zone:100m
time1,設置強制更新緩存的時間,如果在time1時間內緩存沒有被訪問,那么就強制刪除磁盤上的緩存
size2,設置硬盤中緩存數據的大小限制,超過該限制的時候根據最少訪問原則刪除緩存
number,緩存索引重建進程每次加載的數據元素的數量上限
time2,設置緩存索引重建進程在一次遍歷結束,下次遍歷開始之間的暫停時長
time3,設置遍歷一次磁盤索引源數據的時間上限
- proxy_cache_bypass
proxy_cache_bypass string
配置nginx服務器向客戶端發送相應數據時,不從緩存中獲取的條件。這些條件支持nginx配置的常用變量。
例如
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment $http_pragma $http_authorization
當至少有一個字符串指令不為空或者不等於0時,相應數據不從緩存獲取
- proxy_cache_key
proxy_cache_key string;
用於設置nginx在內存中建立索引時使用的關鍵字
例如
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
- proxy_cache_lock
proxy_cache_lock on|off;
是否開啟緩存的鎖功能
- proxy_cache_lock_timeout
proxy_cache_lock_timeout time;
設置緩存的鎖功能開啟后鎖的超時時間
- proxy_cache_min_uses
proxy_cache_min_uses number;
當客戶端向被代理服務器發送相同的請求達到指定的次數時,nginx服務器才會對該請求的響應數據做緩存,默認為1
- proxy_cache_use_stale
proxy_cache_use_stale error|timeout|invalid_header|updating|http_500|http_502|http_503|http_504|http_404|off ...
當nginx服務器訪問被代理服務器時出現服務器無法訪問或者訪問錯誤等現象時。nginx服務器可以使用歷史緩存響應客戶端的請求
- proxy_cache_valid
proxy_cache_valid [code ...] time;
針對不同的HTTP響應狀態設置不同的緩存時間
例如
proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h;
以上就是設置 Proxy Cache時常使用的幾種指令,但是有時候我們自己進行測試時會發現我們制定的緩存目錄並沒有生成緩存,只是我們需要確認一下這幾個指令是否進行了設置:
proxy_cache_path、proxy_pass、proxy_cache、proxy_cache_valid、proxy_cache_key
例如
http{ proxy_cache_path /home/soft/nginx/data/cache keys_zone=mayuan:100m; server{ .. 省略其他配置 .. location / { proxy_pass http://127.0.0.1:8080; proxy_cache mayuan; proxy_cache_key $scheme$proxy_host$uri$is_args$args; proxy_cache_valid 200 304 302 24h; } } }