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=: keys_zone=two:10m loader_threshold=
loader_files= 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 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 ;
default_type text/plain;
root html;
add_header X-Accel-Expires ;#配置3秒钟缓存过期
          add_header Vary *; #表示不做缓存 怎么访问都是MISS
          add_header Cache_Control 'max-age=3,state-while-revalidate=3'; #类似Vary * 也表示不做缓存
location / { }
}

 

Nginx 针对上游服务器缓存的更多相关文章

  1. nginx 加工上游服务器返回的内容,并返回给客户端

    禁用上游响应头部功能 Syntax: proxy_ignore_headers field ...; Default: — Context: http, server, location 功能介绍:某 ...

  2. nginx 与上游服务器建立连接的相关设置

    向上游服务建立联系 Syntax: proxy_connect_timeout time; #设置TCP三次握手超时时间,默认60秒:默认超时后报502错误 Default: proxy_connec ...

  3. 基于nginx实现上游服务器动态自动上下线——不需reload

    网上关于nginx的介绍有很多,这里讲述的是上游服务(如下图的Java1服务)在没有"网关"的情况下,如何通过nginx做到动态上下线. 传统的做法是,手动修改nginx的upst ...

  4. Nginx 当上游服务器返回失败时的处理办法

    陶辉95课 Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503  ...

  5. Nginx 接受上游缓存流程

    L:101 这个指令主要是由上游服务器来决定是否缓存 详见博客Nginx 针对上游服务器缓存

  6. 安全开发运维必备,如何进行Nginx代理Web服务器性能优化与安全加固配置,看这篇指南就够了

    本章目录 1.引言 1.1 目的 1.2 目标范围 1.3 读者对象 2.参考说明 2.1 帮助参考 2.2 参数说明 3.3 模块说明 3.服务优化 3.1 系统内核 3.2 编译优化 3.3 性能 ...

  7. 一、zuul如何路由到上游服务器

    所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 zuul在分布式项目中充当着一个网关的角色,而它最主要的功能像nginx一样针对上游服务 ...

  8. Nginx+upstream针对后端服务器容错的运维笔记

    熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一.nginx的upstream容错 1)nginx 判断节点失效 ...

  9. Nginx针对前端静态资源的缓存处理

    当用户上报一个线上的bug后,开发者修改前端代码的bug上新后,用户反映问题依旧存在的问题...这种情况是不是曾经遇到过,这个问题跟浏览器的缓存机制有很大关系(强制缓存和协商缓存,这里我就不介绍具体的 ...

随机推荐

  1. 用Python实现大文件分割

    python代码如下: import sys,os kilobytes = 1024 megabytes = kilobytes*1000 chunksize = int(200*megabytes) ...

  2. UVA10256 The Great Divide

    怎么又没人写题解,那我来贡献一发好了. 题目意思很简单,平面上有两种颜色的点,问你能否求出一条直线使两种颜色的点完全分开. 首先我们考虑两个点集相离的充要条件,这两个点集的凸包必须相离.(很好证明或者 ...

  3. Rommel - C# 浅谈 接口(Interface)的作用

    鉴于网上太多太多的对C# 接口的误解,想来想去还是自己做一个完美的接口 篇章 继承"基类"跟继承"接口"都能实现某些相同的功能,但有些接口能够完成的功能是只用基 ...

  4. flex布局,最后一行左对齐

    拥抱flex 网上查找资料解决办法都是操作数据,个人感觉css问题还是用css来解决(当然问题不同,解决方案不同,这里只是针对某个问题的解决方法,不能解决所有问题,大家视情况而定,如果还是不行欢迎沟通 ...

  5. Item 13: 比起iterator优先使用const_iterator

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 STL中的const_iterator等价于pointers-to ...

  6. Python_每日习题_0003_完全平方数

    # 题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? # 程序分析 因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取 ...

  7. H5 后代选择器

    12-后代选择器 我是段落 我是段落 我是段落 我是段落 我是段落 我是段落 <!DOCTYPE html> <html lang="en"> <he ...

  8. Linux reboot与init 6区别

    Reboot与init 6的区别 - flyingcloud_2008的专栏 - CSDN博客https://blog.csdn.net/flyingcloud_2008/article/detail ...

  9. Zabbix appliance manual

    https://www.zabbix.com/documentation/4.0/manual/appliance If the appliance fails to start up in Hype ...

  10. MySQL数据库性能优化思路与解决方法(二转)

    原文:http://bbs.landingbj.com/t-0-242512-1.html 1.锁定表 尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是 ...