是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战
缓存简介
Nginx的http_proxy模块,可以实现类似于Squid的缓存功能。
Nginx对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络阻塞,同时还能减小数据传输延迟,提高用户访问速度。
同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务的鲁棒性即健壮性。
- 对于缓存,我们大概会有以下问题 :
- 缓存文件放哪儿 ?
- 如何指定哪些请求被缓存 ?
- 缓存的有效期是多久 ?
- 对于某些请求,是否可以不走缓存 ?
解决这些问题后,Nginx的缓存也就基本配置完成了。
- 缓存文件放在哪儿 ?
- proxy_cache_path:Nginx 使用该参数指定缓存位置。
- proxy_cache:该参数为之前指定的缓存名称。
- proxy_cache_path:有两个必填参数, 第一个参数为缓存目录。 第二个参数keys_zone指定缓存名称和占用内存空间的大小。
1 | ini复制代码nginx.confg 配置文件 |
注 :示例中的10m是对内存中缓存内容元数据信息大小的限制,如果想限制缓存总量大小,需要用max_size参数。
- 如何指定哪些请求被缓存?
- Nginx默认会缓存所有get和head方法的请求结果,缓存的key默认使用请求字符串。
- 自定义Key 例如proxy_cache_key “hosthosthostrequest_uri$cookie_user” ;
- 指定请求至少被发送了多少次以上时才缓存,可以防止低频请求被缓存。例如proxy_cache_min_uses 5 ;
- 指定哪些方法的请求被缓存,例如proxy_cache_methods GET HEAD POST ;
1 | ini复制代码nginx.confg 配置文件 |
- 缓存有效期
默认情况下,缓存内容是长期留存的,除非缓存的总量超出限制。可以指定缓存有效时间,例如 :
- 响应状态码为200 、302 时 ,10分钟有效 ,proxy_cache_valid 200 302 10m ;
- 对应任何状态码,5分钟有效 ,proxy_cache_valid any 5m ;
1 | ini复制代码nginx.confg 配置文件 |
- 对于某些请求,是否可以不走缓存 ?
proxy_cache_bypass : 该指令响应来自原始服务器而不是缓存。
例如proxy_cache_bypass cookie_nocachecookie\_nocache cookie_nocachearg_nocache $arg_comment ;
如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发。
1 | ini复制代码nginx.confg 配置文件 |
缓存原理
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:
缓存配置
操作配置后,curl -I 命令验证缓存的状态 。
本文转载自: 掘金