zoukankan      html  css  js  c++  java
  • Nginx 针对上游服务器缓存

    L:99

    nginx缓存 : 定义存放缓存的载体

    proxy_cache 指令

    Syntax: proxy_cache zone | off;
    Default:
    proxy_cache off;
    Context: httpserverlocation

    proxy_cache_path 指令 定义磁盘哪个位置存放缓存文件

    Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|offkeys_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:
    Context: http

    proxy_cache_path 指令参数详解

    path : 定义缓存文件的存放位置

    levels :定义缓存路径的目录层级,最多3级,每层目录长度为1或2字节

    use_temp_path:如果设置on时,文件会放到proxy_temp_path定义的临时目录

             如果设置off时 ,文件就会存放到默认的proxy_cache_path目录

    keys_zone:name是共享内存的名字,由proxy_cache指令使用

          size 是指共享内存大小,1mb大约可以存放8000个key

    inactive :在inactive时间内没有被访问的缓存会被淘汰掉 默认10分钟

    max_size:设置最大的缓存文件大小,超出后由cache manager进程按LRU链表淘汰

    manager_file :cache manager 进程在1次淘汰过程中,淘汰的最大文件数 默认100

    manager_sleep :执行一次淘汰循环后 cache manager进程的休眠时间  默认200毫秒

    manager_threshold :执行一次淘汰循环的最大耗时 默认50毫秒

    loader_files : cache_loader 进程载入磁盘中缓存至共享内存,每批最多处理的文件数 默认100

    loader_sleep : 执行一次缓存文件至共享内存后,进程休眠时间 默认200毫秒

    loader_threshold : 每次载入缓存文件至共享内存的最大耗时 默认50毫秒 

     

    缓存关键字

    Syntax: proxy_cache_key string;
    Default:
    proxy_cache_key $scheme$proxy_host$request_uri;
    Context: httpserverlocation

    缓存的响应

    Syntax: proxy_cache_valid [code ...] time;(时间是必填的code是选填)
    Default:
    Context: httpserverlocation

    对不同的响应码缓存不等的时长

      如 : code 404 5m;

     标识时间

      仅对以下响应缓存 

       200、301、302

    通过响应头部控制缓存时长

      X-Accel-Expires 单位秒

      值为 0 时 禁止nginx缓存内容

      可以通过 @设置缓存到某一个个时刻

      响应头若含有 Set-Cookie则不缓存

      响应头含有Vary:*则不缓存

      

    设置那些内容不使用缓存

    Syntax: proxy_no_cache string ...参数为真时 响应不存入缓存;
    Default:
    Context: httpserverlocation

    如:proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;   

      proxy_no_cache $http_pragma $http_authorization;

    当相应值为真 就不使用缓存内容

    Syntax: proxy_cache_bypass string ...;
    Default:
    Context: httpserverlocation






    更变HEAD方法
    Syntax: proxy_cache_convert_head on | off;
    Default:
    proxy_cache_convert_head on;
    Context: httpserverlocation






    Upstream_cache_status变量与值说明

    Miss : 为命中缓存

    HIT : 命中缓存

    EXPIRED : 缓存已经过期

    STALE : 命中了陈旧的缓存

    UPDATING : 内容陈旧,但正在更新

    REVALIDATED : nginx验证了陈旧的内容依然有效

    BYPASS : 响应是从原始服务器获得的

    HTTP/1.1 200 OK
    Server: openresty/1.13.6.2
    Date: Fri, 08 Mar 2019 10:23:45 GMT
    Content-Type: text/plain
    Content-Length: 6
    Connection: keep-alive
    Last-Modified: Wed, 13 Feb 2019 09:03:32 GMT
    ETag: "5c63dd64-6"
    X-Cache-Status: HIT
    Accept-Ranges: bytes

    代码演示下游服务器代码示列:

    proxy_cache_path /data/tmpcache levels=2:2 keys_zone=two:10m loader_threshold=300 
                         loader_files=200 max_size=200m inactive=1m;
    
    server {
        server_name shop**.com.cn;
        root html/;
      error_log logs/cacherr.log debug; #打开DEBUG日志能实时看查看问题
    location /{ proxy_cache two; #用了 上面的keys_zone定义的two 并且缓存10分钟 proxy_cache_valid 200 1m; #如果是响应码200 则是1分钟有效期 add_header X-Cache-Status $upstream_cache_status; #这里添加了个头 值就是前面介绍缓存状态值 proxy_pass http://192.168.0.51:8012;; } }

    针对这个上游服务器代码不阐述了就简单 配置个1.txt能访问的静态文件即可

    我们演示个请求

    curl http://shop***.com.cn:8080/1.txt -I 

    我们看下返回的头

    HTTP/1.1 200 OK
    Server: openresty/1.13.6.2
    Date: Sat, 09 Mar 2019 06:38:56 GMT
    Content-Type: text/plain
    Content-Length: 6
    Connection: keep-alive
    Last-Modified: Wed, 13 Feb 2019 09:03:32 GMT
    ETag: "5c63dd64-6"
    X-Cache-Status: MISS  #这个就是我们在location 放的头部 值为缓存状态
    Accept-Ranges: bytes

    再次请求 curl http://shop***.com.cn:8080/1.txt -I 

    HTTP/1.1 200 OK
    Server: openresty/1.13.6.2
    Date: Sat, 09 Mar 2019 06:39:00 GMT
    Content-Type: text/plain
    Content-Length: 6
    Connection: keep-alive
    Last-Modified: Wed, 13 Feb 2019 09:03:32 GMT
    ETag: "5c63dd64-6"
    X-Cache-Status: HIT #我们发现 值边了 处于hit 命中状态 说明已经用的是缓存了
    Accept-Ranges: bytes

     所有缓存文件否存放在 /data/tmpcache 这个目录下

    我们针对上游服务器也可以如下配置

    server {
                    listen 8012;
                    default_type text/plain;
                    root html;
                    add_header X-Accel-Expires 3;#配置3秒钟缓存过期
              add_header Vary *; #表示不做缓存 怎么访问都是MISS
              add_header Cache_Control 'max-age=3,state-while-revalidate=3'; #类似Vary * 也表示不做缓存 location
    / { } }

     

  • 相关阅读:
    面试题:JS中map的陷阱
    C#中正则表达式进行忽略大小写的字符串替换
    C#窗体钉在桌面、置底、嵌入桌面的办法
    创建C#串口通信程序详解
    为类和函数代码自动添加版权注释信息
    C# 如何编辑文件的摘要信息
    C# GDI在控件上绘图
    泛型Dictionary的用法详解
    Winform 导出成Excel打印代码
    C#反射深入学习
  • 原文地址:https://www.cnblogs.com/jackey2015/p/10478450.html
Copyright © 2011-2022 走看看