Nginx學習筆記——場景實踐之《快取服務》
阿新 • • 發佈:2018-12-14
快取型別
使用快取,就是為了減少後端的壓力。 (1)服務端快取:Memcached、Redis等。 (2)代理快取:Nginx、代理、中介軟體上的快取。 (3)客戶端快取:瀏覽器上面的。
代理快取
proxy_cache配置語法
先定義快取路徑:
syntax:proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_shreshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]; Default:預設無 Context:http
定義快取開關,其中zone為名字
Syntax:proxy_cache zone|off;
Default:proxy_cache off;
Context:http,server,location
快取過期週期,code表示狀態碼
Syntax:proxy_cache_valid [code ...] time;
Default:預設無
Context:http,server,location
快取的維度,快取的範圍(預設:協議+主機+URL)
Syntax:proxy_cache_key string; Default:proxy_cache_key $scheme$proxy_host$request_uri; Context:http,server,location
測試配置
同樣開啟三個埠模擬三臺伺服器,配置一個代理伺服器。
upstream server_pool{ server 192.168.174.132:8001; server 192.168.174.132:8002; server 192.168.174.132:8003; } proxy_cache_path /opt/app/cache levels=1:2 keys_zone=shen_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name localhost; location / { proxy_cache shen_cache; proxy_pass http://server_pool; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; include proxy_params; }
此處配置了服務池,快取路徑,快取配置。 注:proxy_next_upstream,配置了當伺服器出現後面的情況後,跳轉到下一個伺服器訪問。
效果
當我們訪問頁面時,發現會訪問的是同一個伺服器,因為proxy_cache_key是同一個(類似於uri_hash)。
發現/opt/app/cache
會有快取檔案。
當我們關閉快取服務後,再次訪問,發現變成輪詢訪問伺服器組。
快取語法補充
定期清理快取
方式一:rm -rf 快取目錄內容,清空所有快取 方式二:第三方擴充套件模組ngx_cache_purge
部分頁面不快取
Syntax:proxy_no_cache string ...;
Default:預設無
Context:http,server,location
如配置:
if ($request_uri ~ ^/(url3|login|register|password\/reset)) {
set $cookie_nocache 1;
}
location / {
proxy_cache shen_cache;
proxy_pass http://server_pool;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
proxy_no_cache $cookie_nocache $arg_nochace $arg_comment;
proxy_no_cache $http_pragma $http_authorization;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
include proxy_params;
}
其中,proxy_no_cache 後面的專案不為0或者空,則它匹配的網址不進行快取。
則http://XXX/url3.html
會進行輪詢訪問伺服器。
大檔案分片請求
Syntax:slice size;
Default:slice 0;
Context:http,server,location
把一個大檔案,分割成小的片斷,分別去請求不同的伺服器,形成小的快取檔案。 優勢:每個子請求收到的資料都會形成一個獨立檔案,一個請求斷了,其它請求不受影響。 缺點:當檔案很大或slice很小的時候,可能會導致檔案描述符耗盡等情況。