nginx proxy cache的配置實現

myownstars發表於2015-01-30
先了解一下http是如何使用和管理快取的
開啟快取時,http請求的流程如下
1 接收請求,解析請求頭
2 查詢本地副本
3 新鮮度檢測,驗證副本是否足夠新鮮
4 建立響應併傳送

新鮮度檢測
expires:指定絕對過期日期,
cache-control:http1.1引入,以秒為單位,為相對過期日期;
伺服器再驗證
文件過期不代表已經修改,快取需要詢問原始伺服器文件是否發生變化,傳送條件GET,
If-modified-since:
If-none-match:,可指定多個實體標籤; 有些文件可能被週期性重寫,但內容不變;有些文件可能所做修改不重要,不需要同步;

控制快取
即控制在文件過期之前可以將其快取多長時間,
 響應首部,按優先順序遞減排序
cache-control:no-store:禁止使用快取
cache-control:no-cache:進行快取,但每次使用前必須與伺服器進行新鮮度再驗證之前
cache-control:max-age:設定為0表示禁用快取
expires:指定絕對日期
cache-control:must-revalidate:快取可提供一些陳舊物件,但在同伺服器再驗證之前不可使用


要使用代理快取,必須在nginx.conf進行必要的配置
1 連線選項
主要由proxy_pass和upstream組成, 還有一些用於設定等待超時和請求頭的選項,如proxy_hide_header,proxy_pass_header和proxy_set_header等;
Proxy_connect_timeout:nginx與後端伺服器建立連線的超時時間
Proxy_read_timeout:nginx向後端伺服器發出read請求後等待響應的超時時間
Proxy_send_timeout:nginx向後端伺服器發出write請求後等待響應的超時時間
Proxy_redirect:修改被代理伺服器響應頭中的location


2 Proxy buffer
開啟後,nginx先將被代理伺服器的響應存於buffer,然後非同步地發給客戶端,若buffer不夠大則暫存於臨時檔案;
若關閉proxy buffer,則ngnix只能同步將資料傳輸給客戶端,Proxy buffer是per-request level,而非全域性共享;
Buffer向客戶端傳送資料期間狀態為busy,任何針對該buffer的請求都將失敗;
Proxy_buffering:on|off,是否啟用proxy buffer;
Proxy_buffers number size:buffer的個數和大小;
Proxy_busy_buffers_size: 處於busy狀態的buffer大小;
 
 
3 Proxy cache
除了充當代理伺服器,nginx還可行使類似varnish/squid的快取職責,即將客戶端的請求內容快取在Nginx伺服器,下次同樣的請求則由nginx直接返回,減輕了被代理伺服器的壓力;
cache使用一塊公共記憶體區域(共享記憶體),存放快取的索引資料,Nginx啟動時cache loader程式將磁碟快取的物件檔案(cycle->pathes,以紅黑樹組織)載入到記憶體中,載入完畢後自動退出;
只有開啟了proxy buffer才能使用proxy cache;
注1:若被代理伺服器返回的http頭包含no-store/no-cache/private/max-age=0或者expires包含過期日期時,則該響應資料不被nginx快取;

配置項
Proxy_cache zone|off:公共記憶體的名稱,存放快取的索引資料,nginx啟動時由cache loader程式建立,而後由cache manager程式管理;off則關閉proxy_cache;
Proxy_cache_bypass string …:有一個字串不為空或不等於0時,nginx向客戶端傳送響應時不使用快取;
Proxy_no_cache string:規定何種情況下不使用cache;
Proxy_cache_key string;為快取建立索引時使用的關鍵字;
Proxy_cache_min_uses number:預設為1,當客戶端傳送相同請求達到規定次數後,nginx才對響應資料進行快取;
Proxy_cache_path:快取的儲存路徑和索引資訊;
  path 快取檔案的根目錄;
  level=N:N在目錄的第幾級hash目錄快取資料;
  keys_zone=name:size 快取索引重建程式建立索引時用於存放索引的記憶體區域名和大小;
  interval=time強制更新快取時間,規定時間內沒有訪問則從記憶體中刪除,預設10s;
  max_size=size硬碟中快取資料的上限,由cache manager管理,超出則根據LRU策略刪除;
  loader_sleep=time索引重建程式在兩次遍歷間的暫停時長,預設50ms;
  loader_files=number重建索引時每次載入資料元素的上限,程式遞迴遍歷讀取硬碟上的快取目錄和檔案,對每個檔案在記憶體中建立索引,每建立一個索引稱為載入一個資料元素,每次遍歷時可同時載入多個資料元素,預設100;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-1421402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章