Nginx作為緩存服務


緩存類型

 (1) 服務器緩存

服務端緩存一般使用Memcache、Redis

 

(2)代理緩存

 

(3)客戶端緩存

 

 

 

代理緩存流程圖

 

 

 

第一步:客戶端第一次向Nginx請求數據a;

第二步:當Nginx發現緩存中沒有數據a時,會向服務端請求數據a;

第三步:服務端接收到Nginx發來的請求,則返回數據a到Nginx,並且緩存在Nginx;

第四步:Nginx返回數據a給客戶端應用;

第五步:客戶端第二次向Nginx請求數據a;

第六步:當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配置語法

  • Syntax:  proxy_cache zone | off;
  • Default: proxy_cache off;
  • Context: http, server, location

proxy_cache_valid配置語法

  • Syntax: proxy_cache_valid [code ...] time;
  • Default: —
  • Context: http, server, location

proxy_cache_key配置語法

  • Syntax: proxy_cache_key string;
  • Default: proxy_cache_key $scheme$proxy_host$request_uri;
  • Context: http, server, location

 

案例演示:

    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很小的時候,可能會導致文件描述符耗盡的情況。  

語法

  • syntax:slice size;
  • Default:slice 0;
  • Context:http,server,location

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM