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. Clustering[Introduction]

    0. 聚类步骤 为了完成一个聚类任务,必须遵循以下步骤: 特征选择:合适的选择特征,尽可能多的包含任务关心的信息,使得信息冗余减少和最小化是主要目标: 近邻测度:用于定量测量两个特征向量如何" ...

  2. Materialized View模式

    Materialized-View模式是在要求数据格式不利于查询操作的情况下,根据多个数据仓库的数据生成预生成的视图的一种模式.这种模式可以帮助支持高效的查询和数据提取,提高应用程序的性能. 问题 在 ...

  3. 关于学习JAVA第二章的心得

    这章主要讲了JAVA的变量,数据类型和运算符的使用方法及规则. 其实在大一的时候接触过一点C和C++的知识所以对变量,数据类型,运算符还是有一定了解的. 变量其实就是存储数据的空间.我们每次使用某一种 ...

  4. 2小时学会Spring Boot(IDE:eclipse)

    一:安装STS插件 官网下载:点此下载STS 注意:STS版本必须与eclipse版本对应 安装教程:http://blog.csdn.net/cryhelyxx/article/details/53 ...

  5. 【全网最全的博客美化系列教程】01.添加Github项目链接

    全网最全的博客美化系列教程相关文章目录 [全网最全的博客美化系列教程]01.添加Github项目链接 [全网最全的博客美化系列教程]02.添加QQ交谈链接 [全网最全的博客美化系列教程]03.给博客添 ...

  6. 牛客---java练习

    一. 1. abstract可以修饰方法和类,不能修饰属性.抽象方法没有方法体,即没有大括号{}.抽象类中的成员属性都是public static final类型的:成员方法都是public abst ...

  7. BZOJ1283 序列 网络流区间覆盖模型

    就是区间覆盖模型的费用流版. 区间覆盖模型

  8. # 【Python3练习题 004】输入某年某月某日,判断这一天是这一年的第几天?

    # [Python练习题 004]输入某年某月某日,判断这一天是这一年的第几天? # 思路:先判断是否为闰年,这关系到 2 月份的天数.# 之后再根据月份值把前几个月的天数累积加起来,最后再加上个“日 ...

  9. React Native之本地文件系统访问组件react-native-fs的介绍与使用

    React Native之本地文件系统访问组件react-native-fs的介绍与使用 一,需求分析 1,需要将图片保存到本地相册: 2,需要创建文件,并对其进行读写 删除操作. 二,简单介绍 re ...

  10. Linux 查找文件命令 find whereis locate

    Linux 有三个查找文件的命令:find, whereis, locate 其中find 不常用,whereis与locate经常使用,因为find命令速度较慢,因为whereis与locate是利 ...