nginx 缓存机制

nginx 缓存机制,第1张

Nginx缓存的基本思路

基本思想是利用客户访问的时间局部性原理,对客户已经访问过的内容在Nginx服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过Nginx服务器再次向后端服务器发出请求,所以能够减少Nginx服务器与后端服务器之间的网络流量,减轻网络拥塞,同时还能减小数据传输延迟,提高用户访问速度。同时,当后端服务器宕机时,Nginx服务器上的副本资源还能够回应相关的用户请求,这样能够提高后端服务器的鲁棒性。

对于缓存,我们大概会有以下问题:

(1)缓存文件放在哪儿?

(2)缓存的空间大小是否可以限定?

(3)如何指定哪些请求被缓存?

(4)缓存的有效期是多久?

(5)对于某些请求,是否可以不走缓存?

解决这些问题后,nginx的缓存也就基本配置完成了,下面看详细配置过程

开启缓存

要使用缓存,首先要使用 proxy_cache_path 这个指令(必须放在 http 上下文的顶层位置),然后在目标上下文中使用 proxy_cache 指令

配置示例

proxy_cache_path 有两个必填参数,第一个参数为 缓存目录,第二个参数keys_zone指定缓存名称和占用内存空间的大小(注:示例中的10m是对内存中缓存内容元数据信息大小的限制,如果想限制缓存总量大小,需要用 max_size 参数)

proxy_cache 的参数为之前指定的缓存名称

缓存管理的相关进程

在缓存工作中有两个附加进程:

(1)缓存管理器

定期检查缓存状态,看缓存总量是否超出限制,如果超出,就移除其中最少使用的部分

(2)缓存加载器

加载器只在nginx启动后运行一次,把缓存内容的元数据信息加载到内存空间,如果一次性加载全部缓存信息,会大量消耗资源,使nginx在启动后的几分钟里变慢,为避免此问题,有3种加载策略:

loader_threshold – 指定每次加载执行的时间

loader_files – 每次最多加载的数量

loader_sleeps – 每次加载的延时

例如:

proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200

指定缓存哪些请求

nginx默认会缓存所有 get 和 head 方法的请求结果,缓存的key默认使用请求字符串

(1)自定义key

例如 proxy_cache_key " request_uri cookie_nocache arg_comment

如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发

综合示例

nginx 缓存机制

三分钟看懂Nginx服务器的缓存原理和机制

本文介绍NGINX缓存机制,配置和参数说明。

如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力。因为静态文件(比如css,js, 图片)中,很多都是不经常更新的。nginx使用proxy_cache将用户的请求缓存到本地一个目录。下一个相同请求可以直接调取缓存文件,就不用去请求服务器了。毕竟,IO密集型服务的处理是nginx的强项。

Nginx的缓存加速功能是由proxy_cache(用于反向代理和静态缓存)和fastcgi_cache(PHP动态缓存)两个功能模块完成。

Nginx缓存特点:

先上个例子:

因为我是在一台服务器上做试验,所以用了两个端口 80 和 90 进行模拟两台服务器之间的交互。

接下来讲一下配置项:

这里我设置了 图片 、 css 、 js 静态资源进行缓存。

当用户输入 http://wangxiaokai.vip 域名时,解析得到 ip:port 的访问地址。 port 默认为80。所以页面请求会被当前server截取到,进行请求处理。

当解析到上述文件名结尾的静态资源,会到缓存区获取静态资源。

如果获取到对应资源,则直接返回数据。

如果获取不到,则将请求转发给 proxy_pass 指向的地址进行处理。

这里直接处理 90 端口接受到的请求,到服务器本地目录 /mnt/blog 下抓取资源进行响应。

细心的读者应该发现,我在第二段例子里,留了个彩蛋 add_header wall "hey!guys!give me a star." 。

add_header 是用于在报头设置自定义的信息。

所以,如果缓存有效的话,那么静态资源返回的报头,一定会带上这个信息。

(1)Nginx系列教程(3)nginx缓存服务器上的静态文件

https://yq.aliyun.com/articles/752967

(2)proxy_cache

nginx 反向代理之 proxy_cache https://www.cnblogs.com/yyxianren/p/10832172.html

(3)Nginx使用upstream负载均衡和proxy_cache缓存实现反向代理

https://blog.51cto.com/13770206/2163952


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/207729.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存