首页 > 系统相关 >关于Nginx缓存

关于Nginx缓存

时间:2023-10-24 19:02:01浏览次数:42  
标签:缓存 zone keys cache Nginx 关于 key proxy

Nginx缓存

一般情况下系统用到的缓存有三种

  • 服务端缓存: 缓存存在后端服务器,如redis
  • 代理缓存: 缓存存储在代理服务器或中间件,内容从后端服务器获取,保存在本地
  • 客户端缓存: 缓存在浏览器什么时候会出现304? 服务器响应中包含有ETaglast-modified,浏览器下次去请求时会发送这两个标签,直接返回304 Not Modified来告诉浏览器该资源没有修改,不需要从服务器获取最新的,浏览器就会直接使用本地缓存

Nginx使用的缓存属于代理缓存

cache配置

Nginx通过proxy_cache来实现缓存。Buffer(缓冲)主要用于传输效率不同步或者优先级不相同的设备之间传输数据,通过对一方数据进行临时存放,在统一发送的方式传递给另一方,以降低进程间的等待时间;Cache(缓存)主要用于将硬盘上已有的数据在内存中建立缓存数据,提高数据的访问效率。

而proxy_cache只有在Proxy Buffer机制开启的情况下Proxy Cache的配置才会发挥作用。

相关配置

  • proxy_zone: zone | off 默认是off,即关闭proxy_cache功能,zone为用于存放缓存的内存区域名称,可以在http/server、location块内使用

  • proxy_cache_path: path [levels=levels] keys_zone-name:size [inactive=time] [max_size=size] 只能在http块内使用

    • path:设置缓存数据存放的路径
    • levels:设置目录层级,如levels=1:2,表示有两个子目录
    • keys_zone:设置内存zone的名称和大小,如keys_zone=my:10m
    • inactive:设置缓存多长时间失效,当磁盘上的缓存数据在该时间段内没有被访问过,就会失效,数据将被删除,默认10s
    • max_size:设置硬盘中最多缓存多少数据,数据超出,则删除最少访问的数据
  • proxy_cache_methods: GET HEAD POST 设置缓存哪些方法

  • proxy_cache_min_uses: 设置缓存的最小使用次数

  • proxy_cache_valid: 对不同的状态码缓存不同的时间

  • proxy_cache_key: 设置缓存的key值

示例

http {
    proxy_cache_path    /var/www/cache #缓存地址
    levels=1:2 #目录分级
    keys_zone=test_cache:10m #开启的keys空间名字:空间大小(1m可以存放8000个key)
    max_size=10g #目录最大大小(超过时,不常用的将被删除)
    inactive=60m #60分钟内没有被访问的缓存将清理
    use_temp_path=off; #是否开启存放临时文件目录,关闭默认存储在缓存地址
                                   
    server {

        # 使用缓存
        location / {
            proxy_cache test_cache;    #开启缓存对应的名称,在keys_zone命名好
            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";
        }

        #不使用缓存
        if ($request_uri ~ ^/(login|register) ) {    #当请求地址有login或register时
            set $nocache = 1;    #设置一个自定义变量为true
        }
        location / {
            proxy_no_cache $nocache $arg_nocache $arg_comment;
            proxy_no_cache $http_pragma $http_authoriztion;
        }
    }
}

expires配置

location ~ .*.(jpg|jpeg|gif|png)$ {
    # 设置图片缓存过期时间
    expires 1d;
} 

# 匹配静态目录
location ~^ /(|css|js) / {
    expires 2h;
}

响应会返回给浏览器Expires属性,展示的是过期时间,之后再次请求该资源时,如果没有超过响应返回的Expires时,则不需要向服务器访问,直接从缓存中获取

静态资源缓存

# 缓存zone levels表示缓存层级以及目录位数 keys_zone表示缓存内存大小 inactive有效期 max_size所占用的最大磁盘大小
proxy_cache_path /data/nginx/cache_ad levels=1:2 keys_zone=cache_cache_ad:100m inactive=7d max_size=200m;

server {
    location / {
      # 缓存zone
      proxy_cache cache_ad;
      # 缓存key  进行md5
      proxy_cache_key $host$uri$is_args$args;
      # 什么情况下进行缓存存储
      proxy_cache_valid 200 304 12h;
    }
}

标签:缓存,zone,keys,cache,Nginx,关于,key,proxy
From: https://blog.51cto.com/u_13444271/8009273

相关文章

  • 关于Linux下Weblogic环境X11图形化处理问题
    转:使用图形验证码的时候报错的关于Linux下Weblogic环境X11图形化处理问题  Java异常处理之InvocationTargetException(反射异常)打印异常......
  • 关于CH32V系列MCU浮点打印使用配置差异
    当程序中需要打印浮点数时,按照下图配置任意勾选一个即可打印浮点数: 当勾选第一个时,float打印会输出正确数值,具体如下: 当勾选第二个时,float打印输出数值如下(5.20会输出5.19),具体如下。 此时若需要输出正确数值5.20,将float类型改为double类型即可 产生该现象的原因:fl......
  • 关于Windows打印机驱动相关问题-如何利用Java(或其他)调用打印机驱动程序完成原始文件翻
    前面这些都是问题描述,问题在偏下面场景:用户电脑上安装了PCL驱动,可通过驱动完成打印。需求:现在需要提供一种脱离PC端完成文件上传并打印的功能。让用户使用手机或pc未安装驱动时都能打印文件。目前思路:首先上传文件这一步没有任何问题,开发了相应的H5界面,通过浏览器进行原始文件......
  • 关于Python正则式中的r和字符串中的r
     正则表达式也是字符串,但是不是普通的字符串,其中包含了正则转义和字符串转义。正则表达式前边加r是取消了字符串转义,但是正则转义还在。例1和例2的对比中,例2的正则表达式取消了普通字符串转义,但是\n在正则表达式里是匹配换行符。例2和例3的对比中,例3的被匹配对象实际是两个字......
  • 探秘磁盘的奥秘:物理结构、缓存和虚拟内存的作用
    引言在我们之前的讲解中,我们已经详细介绍了CPU和内存的物理结构,这是计算机系统中至关重要的组成部分。然而,除了CPU和内存之外,磁盘也扮演着非常重要的角色,它在数据存储方面起着至关重要的作用。因此,我们将继续向大家介绍磁盘的物理结构,以便更全面地了解计算机系统的工作原理。通过......
  • 关于 React 性能优化和数栈产品中的实践
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:的卢引入在日常开发过程中,我们会使用很多性能优化的API,比如像使用memo、useMemo优化组件或者值,再比如使用shouldComponentUpdate减......
  • 关于CH32V系列MCU FLASH地址的分配
    来源:https://www.cnblogs.com/liaigu/p/17784283.html关于在MRS开发环境下,针对CH32V系列MCUFLASH分配,具体方法如下:比如开辟一段空间,存放数组等数据,首先在ld文件中修改FLASH分配,如下图:.consumer_flash1:{.=ALIGN(4);}AT>FLASH1.consumer......
  • 关于低功耗模式下RTC唤醒
    1、关于RTC唤醒失败解决方法问题原因:若使用RTC进行唤醒唤醒不成功,闹钟中断标志没有被置位。原因可能是唤醒信号有毛刺,EXTI系统唤醒,但RTC来不及产生中断标志。解决方法:RTC闹钟中断中判断的标志由RTC_IT_ALR,更改为EXTI_Line17中断标志,需要在中断函数中清17中断线标志。 2、关于......
  • 关于CH32系列MCU设置noinit变量
    关于noinit定义:noinit段指的是芯片SRAM的一块内存区域(注意是RAM区而非Flash),在该段定义的变量、或者函数,在除了掉电之外的任何芯片复位的情况下都不会被重新初始化。关于noinit作用:no_init段常用来保存一些敏感信息,特殊应用场合下的不能被复位的数据或者做复位判断标志等数据。这......
  • nginx unit WebAssembly 试用
    nginxunit已经支持WebAssembly,刚好体验下环境准备基于docker运行unit,对于wasm的开发基于rust,实际上测试直接试用了官方的示例代码docker-composeversion:"3"services:app:image:unit:1.31.1-wasmports:-8080:8080......