首頁 > 軟體

詳解ngx_cache_purge _proxy_cache指令使用

2022-07-25 10:01:58

1. proxy_cache 指令

該指令用於設定一塊公用的記憶體區域的名稱,該區域可以存放快取的索引資料。這些資料在Nginx伺服器啟動時由快取索引重建程序負責建立,在Nginx伺服器的整個執行過程中由快取管理程序負責定時檢測過期資料,檢索等管理工作。

proxy_cache zone | off;
zone,設定的用於存放快取索引的記憶體區域的名稱。
off,關閉proxy_cache 功能,是預設的設定。

2. proxy_cache_bypass指令

該指令用於設定Nginx伺服器向用戶端傳送響應資料時,不從快取中獲取的條件。這些條件支援使用Nginx 設定的常用變數。

proxy_cache_bypass string …;
string為條件變數,支援設定多個,當至少有一個字串指令不為空或者不等於О時,響應資料不從快取中獲取。
看一個例子: proxy_cache _bypass $cookie_nocache $arg nocache $Sarg_comment

$http_pragma $http.authorization;
其中,Scookie_nocache、Sarg_nocache、Sarg_comment、Shttp_pragma
和Shttp_authorization 都是Nginx組態檔的變數,

3. proxy_cache_key指令

該指令用於設定Nginx伺服器在記憶體中為快取資料建立索引時使用的關鍵字

proxy cache key string;
string為設定的關鍵字,支援變數。

如果我們希望快取資料包含伺服器主機名稱等關鍵字,則可以將該指令設定為:
proxy_cache_key “s c h e m e schemeschemehost$request”;

4. proxy_cache_lock指令

該指令用於設定是否開啟快取的鎖功能。在快取中,某些資料項可以同時被多個請求返回的響應資料填充。開啟該功能後,Nginx伺服器同時只能有一個請求填充快取中的某一資料項,這相當於給該資料項上鎖,不允許其他請求操作。其他的請求如果也想填充該項,必須等待該資料項的鎖被釋放。這個等待時間由
proxy_cache_lock_timeout 指令設定。

proxy_cache_lock on | off;
預設情況下為關閉

5. proxy_cache_lock_timeout指令

該指令用於設定快取的鎖功能開啟以後鎖的超時時間。具體細節參見proxy_cache_lock 指令的相關內容

proxy cache_ lock_timeout time;
其中,time為設定的時間,預設為5s。

6. proxy_cache_min_uses指令

該指令用於設定使用者端請求傳送的次數,當用戶端向被代理伺服器傳送相同請求達到該指令設定的次數後,Nginx伺服器才對該請求的響應資料做快取。合理設定該值可以有效地降低硬碟上快取資料的數量,並提高快取的命中率。

proxy_cache_min_uses number;
其中,number為設定的次數。預設設定為1。

7. proxy_cache_path指令

該指令用於設定Nginx伺服器儲存快取資料的路徑以及和快取索引相關的內容

proxy_cache_path [levels=levels] keys_zone=name:sizel [inactive=time1] [max_size=size2][loader_files=number] [loader_sleep=time2][loader_threshold-time3];
  • path,設定快取資料存放的根路徑,該路徑應該是預先存在於磁碟上的。levels,設定在相對於path指定目錄的第幾級hash目錄中快取資料。
  • levels=1:表示一級hash目錄;levels=1:2,表示兩級,依次類推。目錄的名稱是基於請求URL通過雜湊演演算法獲取到的。
  • name:sizel,Nginx伺服器的快取索引重建程序在記憶體中為快取資料建立索引,這一對變數用來設定存放快取索引的記憶體區域的名稱和大小。
  • timel,設定強制更新快取資料的時間,當硬碟上的快取資料在設定的時間內沒有被存取時,Nginx伺服器就強制從硬碟上將其刪除,下次使用者端存取該資料時重新快取。該指令預設設定為10s。
  • size2、設定硬碟中快取資料的大小限制。我們知道,硬碟中的快取源資料由Nginx伺服器的快取管理程序進行管理,當快取的大小超過該變數的設定時,快取管理程序將根據最近最少被存取的策略刪除快取。
  • number,設定快取索引重建程序每次載入的資料元素的數量上限。在重建快取索引的過程中,程序通過一系列的遞迴遍歷讀取硬碟上的快取資料目錄及快取資料檔案,對每個資料檔案中的快取資料在記憶體中建立對應的索引,我們稱每建立一個索引為載入一個資料元素。程序在每次遍歷過程中可以同時載入多個資料元素,該值限制了每次遍歷中同時載入的資料元素的數量。預設設定為100。
  • time2,設定快取索引重建程序在一次遍歷結束、下次遍歷開始之間的暫停時長。預設設定為50ms.
  • time3,設定遍歷一次磁碟快取源資料的時間上限。預設設定為200ms

該指令設定比較複雜,一般需要設定前面三個指令的情形比較多,後面的幾個變數與Nginx伺服器快取索引重建程序及管理程序的效能相關,一般情況下保持預設設定就可以了。我們來看幾個簡單的設定範例:

proxy_cache path /nginx/cache/a levels=1 keys_zone=a:10m;
proxy_cache_path /nginx/cache /b levels-2:2 keys_zone=b:100m;
proxy _cache_path /nginx/cache/c levels=1:1:2 keys_zone=c:1000m;

8. proxy_cache_use_stale指令

如果Nginx在存取被代理伺服器過程中出現被代理的伺服器無法存取或者存取錯誤等現象時,Nginx伺服器可以使用歷史快取響應使用者端的請求,這些資料不一定和被代理伺服器上最新的資料相一致,但對於更新頻率不高的後端伺服器來說,Nginx伺服器的該功能在一定程度上能夠為使用者端提供不間斷存取。該指令用來設定一些狀態,當後端被代理的伺服器處於這些狀態時,Nginx伺服器啟用該功能。

該指令可以支援的狀態如語法結構中所示。

proxy_cache_use_stale error| timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off..·:

9. proxy_cache_valid指令

該指令可以針對不同的HTTP響應狀態設定不同的快取時間

proxy_cache_valid [code…] time;

  • code,設定HTTP響應的狀態程式碼。該指令可選,如果不設定,Nginx伺服器只為HTTP狀態程式碼為200、301和302的響應資料做快取。可以使用“any”表示快取所有該指令中未設定的其他響應資料。
  • time,設定快取時間。看幾個例子:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;

上述例子中,對返回狀態為200和302的響應資料快取10分鐘,對返回狀態為301的響應資料快取1小時,對返回狀態為非200、302和301的響應資料快取1分鐘。

10. proxy_no_cache

該指令同於設定在什麼情況下不使用cache功能

proxy_no_cache $string…;
string 可以是一個或者都多個變數。當string的值不為空或者不為0時,不啟用cache功能

11. proxy_store 指令

該指令設定是否在本地磁碟快取來自被代理伺服器的響應資料。這是Nginx伺服器提供的另一種快取資料的方法,但是該功能相對 Proxy
Cache簡單一些,它不提供快取過期更新、記憶體索引建立等功能,不佔用記憶體空間,對靜態資料的效果比較好。

proxy_store on | off | string;

  • on | off,設定是否開啟ProxyStore功能。如果使用變數on,功能開啟,快取檔案會存放到alias指令或root指令設定的本地路徑下。預設設定為off。
  • string,自定義快取檔案的存放路徑。如果使用變數string,Proxy Store功能開啟,快取檔案會存放到指定的本地路徑下。

Proxy Store方法多使用在被代理伺服器端發生錯誤的情況下,用來快取被代理伺服器的響應資料。

12. proxy_store_access指令

該指令用於設定使用者或使用者組對Proxy Store快取的資料的存取許可權

proxy_store_access users:permissions …

  • users,可以設定為user、group或者all。
  • permissions,設定許可權。

有關Proxy Store方法的使用,我們通過官方給出的範例加深理解,在該範例中筆者通過註釋對設定做了說明:

location /images/
{
  root /data/www;
  error_page 404 = /fetch$uri;      #定義了404錯誤的請求頁面
}

location /fetch/                    #匹配404錯誤時的請求
{
  proxy_pass http://backend;
  proxy_store on;                   #開啟Proxy store方法
  proxy_store_access user:rw group:rw all:r;
  root/data/www;                    #快取資料的路徑
}

到此這篇關於詳解ngx_cache_purge _proxy_cache指令使用的文章就介紹到這了,更多相關ngx_cache_purge _proxy_cache指令內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com