Nginx代理缓存机制(nginx反向代理及缓存机制)
缓存简介
Nginx的http_proxy模块,可以实现类似于Squid的缓存功能。
Nginx对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络阻塞,同时还能减小数据传输延迟,提高用户访问速度。
同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务的鲁棒性即健壮性。
对于缓存,我们大概会有以下问题 :
缓存文件放哪儿 ?
如何指定哪些请求被缓存 ?
缓存的有效期是多久 ?
对于某些请求,是否可以不走缓存 ?
解决这些问题后,Nginx的缓存也就基本配置完成了。
缓存文件放在哪儿 ?
proxy_cache_path:Nginx 使用该参数指定缓存位置。
proxy_cache:该参数为之前指定的缓存名称。
proxy_cache_path:有两个必填参数, 第一个参数为缓存目录。 第二个参数keys_zone指定缓存名称和占用内存空间的大小。
nginx.confg 配置文件 http { proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g; upstream www.nicole.com{ server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server{ listen 80 ; proxy_cache one ; server_name www.nicole.com; } }复制代码
注 :示例中的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 ;
nginx.confg 配置文件 http { proxy_cache_path /data/nginx/cache keys_zone=one:10m; upstream www.nicole.com{ server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server{ listen 80 ; proxy_cache one ; server_name www.nicole.com; location / { proxy_pass http://www.nicole.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_key $host$request_uri$cookie_user; } } }复制代码
缓存有效期
默认情况下,缓存内容是长期留存的,除非缓存的总量超出限制。可以指定缓存有效时间,例如 :
响应状态码为200 、302 时 ,10分钟有效 ,proxy_cache_valid 200 302 10m ;
对应任何状态码,5分钟有效 ,proxy_cache_valid any 5m ;
nginx.confg 配置文件 http { proxy_cache_path /data/nginx/cache keys_zone=one:10m; upstream www.nicole.com{ server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server{ listen 80 ; proxy_cache one ; server_name www.nicole.com; location / { proxy_pass http://www.nicole.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_valid 200 302 10m ; } } }复制代码
对于某些请求,是否可以不走缓存 ?
proxy_cache_bypass : 该指令响应来自原始服务器而不是缓存。
例如proxy_cache_bypass cookie_nocachecookie\_nocachecookie_nocachearg_nocache $arg_comment ;
如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发。
nginx.confg 配置文件 http { proxy_cache_path /data/nginx/cache keys_zone=one:10m; upstream www.nicole.com{ server 127.0.0.1:8881; server 127.0.0.1:8882; server 127.0.0.1:8883; } server{ listen 80 ; proxy_cache one ; server_name www.nicole.com; location / { proxy_pass http://www.nicole.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment ; } } }复制代码
缓存原理
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:
缓存配置
操作配置后,curl -I 命令验证缓存的状态 。
作者:是Nicole呀
链接:https://juejin.cn/post/7036281834728554533
伪原创工具 SEO网站优化 https://www.237it.com/