1. 程式人生 > 實用技巧 >十四、nginx快取代理伺服器

十四、nginx快取代理伺服器

一、概念

在代理伺服器的磁碟中儲存請求目標的內容,加快響應速度,減少應用伺服器(後端伺服器)上的資源 開銷,比如多客戶端請求相同的資源,代理快取命中後,對於應用伺服器來說,只發生了一次資源調 度。

而瀏覽器上的快取配置,一般來說是用來減少本地IO的,請求目標的內容會存放在瀏覽器本地。

二、快取代理的配置

# 代理伺服器配置:
proxy_cache_path /data/nginx/cache max_size=10g levels=1:2
keys_zone=nginx_cache:10m inactive=60m use_temp_path=off;
upstream nginx {
  server 
192.168.0.114; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://nginx; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache nginx_cache; proxy_cache_key $host$uri$is_args$args; proxy_cache_valid
200 304 302 1d; } } proxy_cache_path /data/nginx/cache #快取資源存放路徑,如果cache不存在會自動建立。 levels #設定快取資源的遞迴級別,預設為levels=1:2,表示Nginx為將要快取的資源生成的key從後依次設定兩級儲存。 levels=1:2:2 #定義快取目錄結構層次,1:2:2 可以生成2^4x2^8x2^8=1048576個目錄 key_zone #在共享記憶體中設定一塊儲存區域來存放快取的key和metadata,這樣nginx可以快速判斷一個request是否命中或者未命中快取,1m可以儲存8000個key,10m可以儲存80000個key max_size #最大cache空間,如果不指定,會使用掉所有disk space,當達到配額後,會刪除不活躍的cache檔案 inactive #快取有效時間,未被訪問檔案在快取中保留時間,本配置中如果60分鐘未被訪問則不論狀態是否為 expired #快取控制程式會刪掉檔案。inactive預設是10分鐘。需要注意的是,inactive和expired配置項的含義是不同的,expired只是快取過期,但不會被刪除,inactive是刪除指定時間內未被訪問的快取檔案 use_temp_path #如果為off,則nginx會將快取檔案直接寫入指定的cache檔案中,而不是使用temp_path儲存,official建議為off,避免檔案在不同檔案系統中不必要的拷貝 proxy_cache zone
| off #預設off指明呼叫的快取,或關閉快取機制;Context:http, server, location proxy_cache_key string #快取中用於“鍵”的內容,預設值:proxy_cache_key $scheme$proxy_host$request_uri; proxy_cache_valid [code ...] time #定義對特定響應碼的響應內容的快取時長,定義在http{...}中,示例:proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;

示例:

在http中定義快取資訊

在http配置定義快取資訊
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:2:2 keys_zone=proxycache:20m
inactive=120s max_size=1g;
說明:proxycache:20m 指記憶體中快取的大小,主要用於存放key和metadata(如:使用次數)
max_size=1g 指磁碟存入檔案內容的快取空間最大值

在server中呼叫

呼叫快取功能,需要定義在相應的配置段,如server{...};
proxy_cache proxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
proxy_cache_use_stale;

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...
#在被代理的後端伺服器出現哪種情況下,可直接使用過期的快取響應客戶端
proxy_cache_methods GET | HEAD | POST ...;
#對哪些客戶端請求方法對應的響應進行快取,GET和HEAD方法總是被快取