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. Spring Boot2.0 整合 Kafka

    Kafka 概述 Apache Kafka 是一个分布式流处理平台,用于构建实时的数据管道和流式的应用.它可以让你发布和订阅流式的记录,可以储存流式的记录,并且有较好的容错性,可以在流式记录产生时就进 ...

  2. JavaEE学习之Maven配置文件pom.xml详解(转)

    一.引言 (本文转载自:http://blog.csdn.net/longeremmy/article/details/9670619) 使用maven有一些时间了,一直没有好好将pom配置文件每个节 ...

  3. Netty入门(一)之webSocket聊天室

    一:简介 Netty 是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能.高可靠性协议的服务器和客户端. 换句话说,Netty 是 ...

  4. git 分支管理规范

    保证master分支永远处于可部署的状态.禁止自接提交代码到master分支 开发分支基于master分支创建,命名规范如下: 如果是功能需求,分支命名为feature/xxx,xxx要具有描述性 如 ...

  5. 初步学习Xamarin的感受

    一直仰慕Xamarin的大名,最近抽空去浅学了一下. 最后有一种这东西不咋地,又有一种这东西还不错的感觉 先说下为什么不咋地? 如果在公司项目使用Xamarin.forms这个东西.按照国内APP设计 ...

  6. 跨语言调用Hangfire定时作业服务

    跨语言调用Hangfire定时作业服务 背景 Hangfire允许您以非常简单但可靠的方式执行后台定时任务的工作.内置对任务的可视化操作.非常方便. 但令人遗憾的是普遍都是业务代码和hagnfire服 ...

  7. 牛客国庆集训派对Day2

    题目链接:https://www.nowcoder.com/acm/contest/202/A A 题意:给出最大4096*64和64*4096的矩阵,其中有一个矩阵只含有0和1,问你它们相乘所得到得 ...

  8. net core 端口设置

    在supervisor的启动配置里面增加环境变量: environment=ASPNETCORE_URLS='http://*:5001'

  9. 项目笔记-SC01

    项目启动已有两周,从分析需求到系统设计,文档性工作比较多,只是文档参考比较少,相对的标准就不好界定了. 计划开发时间理论上是按部就班的,没什么变化,可能真正进入开发阶段才会遇到一些问题吧,有些问题就是 ...

  10. Nagios 系统监控

    Nagios 系统监控 Nagios 是一款免费的开源 IT 基础设施监控系统,功能强大,灵活性强,能有效监控 Windows.Linux.VMware 和 Unix 主机状态,交换机.路由器等网络设 ...