Nginx缓存
一般情况下系统用到的缓存有三种
- 服务端缓存:缓存存在后端服务器,如redis
- 代理缓存:缓存存储在代理服务器或中间件,内容从后端服务器获取,保存在本地
- 客户端缓存:缓存在浏览器
- [ ] 什么时候会出现304? 服务器响应中包含有ETag和last-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值
示例
1 | http { |
expires配置
1 | location ~ .*.(jpg|jpeg|gif|png)$ { |
响应会返回给浏览器Expires属性,展示的是过期时间,之后再次请求该资源时,如果没有超过响应返回的Expires时,则不需要向服务器访问,直接从缓存中获取
静态资源缓存
1 | # 缓存zone levels表示缓存层级以及目录位数 keys_zone表示缓存内存大小 inactive有效期 max_size所占用的最大磁盘大小 |