nginx 緩存機制

nginx 緩存機制

 

Nginx緩存的基本思路nginx

 

利用請求的局部性原理,將請求過的內容在本地創建一個副本,下次訪問時再也不鏈接到後端服務器,直接響應本地內容後端

 

Nginx服務器啓動後,會對本地磁盤上的緩存文件進行掃描,在內存中創建緩存索引,並有專門的進程對緩存文件進行過時判斷、更新等進行管理緩存

對於緩存,咱們大概會有如下問題: (1)緩存文件放在哪兒? (2)緩存的空間大小是否能夠限定? (3)如何指定哪些請求被緩存? (4)緩存的有效期是多久? (5)對於某些請求,是否能夠不走緩存? 解決這些問題後,nginx的緩存也就基本配置完成了,下面看詳細配置過程 開啓緩存 要使用緩存,首先要使用 proxy_cache_path 這個指令(必須放在 http 上下文的頂層位置),而後在目標上下文中使用 proxy_cache 指令 配置示例 http { ... proxy_cache_path /data/nginx/cache keys_zone=one:10m; server { proxy_cache one; location / { proxy_pass http://localhost:8000; } } } 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就不會查找緩存,直接進行代理轉發 綜合示例 http { ... // 緩存目錄:/data/nginx/cache // 緩存名稱:one // 緩存佔用內存空間:10m // 加載器每次迭代過程最多執行300毫秒 // 加載器每次迭代過程當中最多加載200個文件 // 緩存硬盤空間最多爲 200m proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300  loader_files=200 max_size=200m; server { listen 8080; // 使用名稱爲one的緩存 proxy_cache one;  location / { // 此location中使用默認的緩存配置 proxy_pass http://backend1; } location /some/path { proxy_pass http://backend2; // 緩存有效期爲1分鐘 proxy_cache_valid any 1m; // 被請求3次以上時才緩存 proxy_cache_min_uses 3; // 請求中有下面參數值時不走緩存 proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment; } } }
相關文章
相關標籤/搜索