• 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
  • 相关阅读:
    XMind中使用快捷键自由移动主题
    【转】】win10 更新后,office2016 激活失效的的解决方法
    不能接收具有研究精神的员工,怎么发展。
    【转】一个伟大的公司必有一个伟大的产品
    【转】】审阅史上最烂的代码
    联想和华为
    用python 实现汉诺塔
    系统架构
    产品 or 项目
    【转】我们就必须承认:这个世界上,有很多问题,就是无解的
  • 原文地址:https://www.cnblogs.com/crazymagic/p/11029487.html
Copyright © 2020-2023  润新知