• Nginx缓存


    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 1 设置缓存的最小使用次数
    • proxy_cache_valid code time 对不同的状态码缓存不同的时间
    • proxy_cache_key line 设置缓存的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;
        		}
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    expires配置

    location ~ .*.(jpg|jpeg|gif|png)$ {
    	# 设置图片缓存过期时间
    	expires 1d;
    } 
    
    # 匹配静态目录
    location ~^ /(|css|js) / {
    	expires 2h;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    响应会返回给浏览器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;
     }
    }
    • 1

    https://zhhll.icu/2021/服务器/Nginx/10.Nginx缓存/

    本文由 mdnice 多平台发布

  • 相关阅读:
    java经典例题30道——(26-30)
    5分钟带你了解python中超级好用的库 you-get
    JAVA反射机制详解
    【problem】解决idea提示Method breakpoints may dramatically slow down debugging
    C#基础学习(二十三)_窗体与事件
    【学习笔记】CF1713F Lost Array
    【20221028】【每日一题】左叶子之和
    算法竞赛进阶指南——链表学习笔记
    PIE-Engine 教程:水稻面积提取2—监督分类(宿迁市)
    Go十大常见错误第10篇:Goroutine和循环变量一起使用的坑
  • 原文地址:https://blog.csdn.net/Lxn2zh/article/details/133983017