(1) 服務器緩存nginx
服務端緩存通常使用Memcache、Redis緩存
(2)代理緩存服務器
(3)客戶端緩存cookie
代理緩存流程圖app
第一步:客戶端第一次向Nginx請求數據a;url
第二步:當Nginx發現緩存中沒有數據a時,會向服務端請求數據a;代理
第三步:服務端接收到Nginx發來的請求,則返回數據a到Nginx,而且緩存在Nginx;code
第四步:Nginx返回數據a給客戶端應用;server
第五步:客戶端第二次向Nginx請求數據a;blog
第六步:當Nginx發現緩存中存在數據a時,則不會請求服務端;
第七步:Nginx把緩存中的數據a返回給客戶端應用。
proxy_cache_path配置語法
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_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default: —
Contex: http
proxy_cache配置語法
proxy_cache_valid配置語法
proxy_cache_key配置語法
upstream imooc { server 192.168.1.112:8001; server 192.168.1.112:8002; server 192.168.1.112:8003; } #須要首先配置 緩存目錄,文件目錄層級2級,空間名字 10m大小,目錄最大大小(超過啓動nginx本身的淘汰規則),在60分鐘的時間內沒有被訪問就會被清理,存放臨時文件 proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name localhost jeson.t.imooc.io; location / { proxy_cache off; #開啓緩存,imooc_cache對應上面keys_zone=imooc_cache:10m ;關閉off proxy_pass http://imooc; proxy_cache_valid 200 304 12h; #200和304頭信息過時時間12小時 proxy_cache_valid any 10m; #其餘過時時間10分鐘 proxy_cache_key $host$uri$is_args$args; #定義緩存的key 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; } }
清理緩存的內容
cd /opt/app/cache rm * ./ -rf
讓部分請求不緩存
upstream imooc { server 192.168.1.112:8001; server 192.168.1.112:8002; server 192.168.1.112:8003; } #須要首先配置 緩存目錄,文件目錄層級2級,空間名字 10m大小,目錄最大大小(超過啓動nginx本身的淘汰規則),在60分鐘的時間內沒有被訪問就會被清理,存放臨時文件 proxy_cache_path /opt/app/cache levels=1:2 keys_zone=imooc_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name localhost jeson.t.imooc.io; #若是url中包含如下路徑參數,那麼 cookie_nocache 的值爲1 if($request_uri ~^/(url3|login|register|password\/reset)){ set $cookie_nocache 1; } location / { proxy_cache off; #開啓緩存,imooc_cache對應上面keys_zone=imooc_cache:10m ;關閉off proxy_pass http://imooc; proxy_cache_valid 200 304 12h; #200和304頭信息過時時間12小時 proxy_cache_valid any 10m; #其餘過時時間10分鐘 proxy_cache_key $host$uri$is_args$args; #定義緩存的key add_header Nginx-Cache "$upstream_cache_status";#增長一個頭信息 #部分不設置緩存 cookie_nocache上面配置的參數, cookie_nocache不爲0或者空 那麼是不會進行緩存的 proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; proxy_no_cache $http_pragma $http_authorization; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 一個服務報錯請求下一個 include proxy_params; } }
大文件分片請求
優點:每一個子請求收到的數據都會造成一個獨立的文件,一個請求斷了,其餘的請求不受到影響
缺點:當文件很大或者slice很小的時候,可能會致使文件描述符耗盡的狀況。
語法