Nginx如何配置基礎緩存


// /path/to/cache/:用於緩存的本地磁盤目錄
// levels :在 /path/to/cache/ 設置了一個兩級層次結構的目錄。
//            將大量的文件放置在單個目錄中會導致文件訪問緩慢,
//            所以針對大多數部署,我們推薦使用兩級目錄層次結構。如果 levels 參數沒有配置,則 Nginx 會將所有的文件放到同一個目錄中。
// keys_zone :設置一個共享內存區,該內存區用於存儲緩存鍵和元數據,有些類似計時器的用途。
//           將鍵的拷貝放入內存可以使 Nginx 在不檢索磁盤的情況下快速決定一個請求是 HIT 還是 MISS,這樣大大提高了檢索速度。
//           一個 1MB 的內存空間可以存儲大約 8000 個 key,那么上面配置的 10MB 內存空間可以存儲差不多 80000 個 key。
// max_size :設置了緩存的上限(在上面的例子中是 10G)。
//                這是一個可選項;如果不指定具體值,那就是允許緩存不斷增長,占用所有可用的磁盤空間。
//                當緩存達到這個上限,處理器便調用 cache manager 來移除最近最少被使用的文件,這樣把緩存的空間降低至這個限制之下。
// inactive :指定了項目在不被訪問的情況下能夠在內存中保持的時間。
//            在上面的例子中,如果一個文件在 60 分鍾之內沒有被請求,則緩存管理將會自動將其在內存中刪除,不管該文件是否過期。
//            該參數默認值為 10 分鍾(10m)。注意,非活動內容有別於過期內容。Nginx 不會自動刪除由緩存控制頭部指定的過期內容。
//            過期內容只有在 inactive 指定時間內沒有被訪問的情況下才會被刪除。如果過期內容被訪問了,那么 Nginx 就會將其從原服務器上刷新,並更新對應的 inactive 計時器。
// use_temp_path:Nginx 最初會將注定寫入緩存的文件先放入一個臨時存儲區域,use_temp_path=off 命令指示 Nginx 將在緩存這些文件時將它們寫入同一個目錄下。
//                強烈建議將參數設置為 off 來避免在文件系統中不必要的數據拷貝。
proxy_cache_path /path/to/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache_path /path/to/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m max_size=10g inactive=60m use_temp_path=off;

// 跨多硬盤分割緩存
split_clients $request_uri $my_cache {
    50% "my_cache_hdd1";
    50% "my_cache_hdd2";
}


server {
    ...
    location / {
        proxy_cache my_cache;
        // 指示 Nginx 在刷新來自服務器的內容時使用 GET 請求。
        // 如果客戶端的請求項已經被緩存過了,但是在緩存控制頭部中定義為過期,那么 Nginx 就會在 GET 請求中包含 If-Modified-Since 字段,發送至服務器端。
        // 這項配置可以節約帶寬,因為對於 Nginx 已經緩存過的文件,服務器只會在該文件請求頭中 Last-Modified 記錄的時間內被修改時才將全部文件一起發送。
        proxy_cache_revalidate on;
        // 該指令設置同一鏈接請求達到幾次即被緩存,默認值為 1 。
        // 當緩存不斷被填滿時,這項設置便十分有用,因為這確保了只有那些被經常訪問的內容會被緩存。
        proxy_cache_min_uses 3;
        // updating 參數告知 Nginx 在客戶端請求的項目的更新正在原服務器中下載時發送舊內容,而不是向服務器轉發重復的請求。
        // 第一個請求陳舊文件的用戶不得不等待文件在原服務器中更新完畢。陳舊的文件會返回給隨后的請求直到更新后的文件被全部下載。
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        // 當多個客戶端請求一個緩存中不存在的文件(或稱之為一個 MISS),只有這些請求中的第一個被允許發送至服務器。
        // 其他請求在第一個請求得到滿意結果之后在緩存中得到文件。如果不啟用 proxy_cache_lock,則所有在緩存中找不到文件的請求都會直接與服務器通信。
        proxy_cache_lock on;
        proxy_pass http://my_upstream;
    }

}


免責聲明!

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



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