Nginx具有很强大的缓存功能,可以对请求的response进行缓存,起到类似CDN的作用,甚至有比 CDN 更强大的功能。同时,Nginx 缓存还可以用来“数据托底”,即当后台 web 服务器挂掉的时候,Nginx 可以直接将缓存中的托底数据返回给用户。此功能就是 Nginx 实现“服务降级”的体现。
Nginx 缓存功能的配置由两部分构成:全局定义与局部定义。在 http{}模块的全局部分中进行缓存全局定义,在 server{}模块的各个 location{}模块中根据业务需求进行缓存局部定义。
1、http{}模块的缓存全局定义
A:proxy_cache_path
用于指定Ngxin缓存的存放路径以及相关配置。
- /usr/local/nginx/cache:缓存位置,可以是其他任意目录
- levels=1:2 表示两级目录管理缓存(usr/local/nginx/cache目录中),第一级目录一个字符命名,第二级目录两个字符命名。
- keys_zone=mycache:10m 在内存中指定一块区域,用来存放缓存的key,这样nginx就可以快速判断一个请求是否命中缓存。mycache就是这块内存区域的名称,可以随意命名。10m表示这块区域所占内存空间的大小。
- max_size=5g 表示缓存最多占硬盘的5g空间。如果不指定,则最终会占满所有硬盘。一旦达到5g,则使用LRU来清理缓存。
- inactive=2h 如果缓存在两个小时之内没有被用到,则会被清理掉,默认是10分钟。
- use_temp_path=off 是否启用临时目录。如果为off,则nginx会将缓存数据直接写入到缓存空间(usr/local/nginx/cache)中,而不使用proxy_temp_path指定的临时目录。如果为on,则会先将缓存数据写入到临时目录,在达到某容量或是某时间(需要配置)之后,再一次性将临时目录中的缓存写入缓存空间中。需要注意,所有向缓存空间写入的缓存数据都需要根据其key进行运算,已确定其所要存放的缓存空间具体的目录,而这个运算相对是比较耗时的。若很多请求的内容都需要做缓存,就可以让use_temp_path设置为on,使用临时目录,这样就可以对缓存批量运算,批量写入到缓存空间。
B、proxy_temp_path
指定 Nginx 缓存的临时存放目录。若 proxy_cache_path 中的 use_temp_path 设置为了 off,则该属性可以不指定。