nginx 快取機制

2021-09-07 08:32:53 字數 1720 閱讀 2933

nginx快取的基本思路

利用請求的區域性性原理,將請求過的內容在本地建立乙個副本,下次訪問時不再連線到後端伺服器,直接響應本地內容

nginx伺服器啟動後,會對本地磁碟上的快取檔案進行掃瞄,在記憶體中建立快取索引,並有專門的程序對快取檔案進行過期判斷、更新等進行管理

對於快取,我們大概會有以下問題:

(1)快取檔案放在哪兒?

(2)快取的空間大小是否可以限定?

(3)如何指定哪些請求被快取?

(4)快取的有效期是多久?

(5)對於某些請求,是否可以不走快取?

解決這些問題後,nginx的快取也就基本配置完成了,下面看詳細配置過程

開啟快取

要使用快取,首先要使用 proxy_cache_path 這個指令(必須放在 http 上下文的頂層位置),然後在目標上下文中使用 proxy_cache 指令

配置示例

}proxy_cache_path 有兩個必填引數,第乙個引數為 快取目錄,第二個引數keys_zone指定快取名稱和占用記憶體空間的大小(注:示例中的10m是對記憶體中快取內容元資料資訊大小的限制,如果想限制快取總量大小,需要用 max_size 引數)

proxy_cache 的引數為之前指定的快取名稱

快取管理的相關程序

在快取工作中有兩個附加程序:

(1)快取管理器

定期檢查快取狀態,看快取總量是否超出限制,如果超出,就移除其中最少使用的部分

(2)快取載入器

載入器只在nginx啟動後執行一次,把快取內容的元資料資訊載入到記憶體空間,如果一次性載入全部快取資訊,會大量消耗資源,使nginx在啟動後的幾分鐘裡變慢,為避免此問題,有3種載入策略:

loader_threshold – 指定每次載入執行的時間

loader_files – 每次最多載入的數量

loader_sleeps – 每次載入的延時

例如:proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

指定快取哪些請求

nginx缺省會快取所有 get 和 head 方法的請求結果,快取的key預設使用請求字串

(1)自定義key

例如 proxy_cache_key "$host$request_uri$cookie_user";

(2)指定請求至少被傳送了多少次以上時才快取,可以防止低頻請求被快取

例如 proxy_cache_min_uses 5;

(3)指定哪些方法的請求被快取

例如 proxy_cache_methods get head post;

快取有效期

預設情況下,快取內容是長期存留的,除非快取的總量超出限制

可以指定快取有效時間,例如

proxy_cache_valid 200 302 10m; //響應狀態碼為200 302時,10分鐘有效

proxy_cache_valid any 5m; //對應任何狀態碼,5分鐘有效

繞開快取

例如 proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;

如果任何乙個引數值不為空,或者不等於0,nginx就不會查詢快取,直接進行****

綜合示例

nginx 快取機制

nginx快取的基本思路 利用請求的區域性性原理,將請求過的內容在本地建立乙個副本,下次訪問時不再連線到後端伺服器,直接響應本地內容 nginx伺服器啟動後,會對本地磁碟上的快取檔案進行掃瞄,在記憶體中建立快取索引,並有專門的程序對快取檔案進行過期判斷 更新等進行管理 對於快取,我們大概會有以下問題...

nginx 快取機制

nginx快取的基本思路 利用請求的區域性性原理,將請求過的內容在本地建立乙個副本,下次訪問時不再連線到後端伺服器,直接響應本地內容 nginx伺服器啟動後,會對本地磁碟上的快取檔案進行掃瞄,在記憶體中建立快取索引,並有專門的程序對快取檔案進行過期判斷 更新等進行管理 對於快取,我們大概會有以下問題...

Nginx快取原理及機制

上篇文章介紹了nginx乙個較為重要的知識點 nginx實現介面限流。本篇文章將介紹nginx另乙個重要知識點 nginx快取原理。其實說到快取技術大家應該都不會很陌生,快取技術的基本思想其實是對使用者已經訪問過的內容在nginx建立副本,如果在一段時間內 快取尚未過期 再次訪問該資料,則不需要重新...