美文网首页
nginx 缓存机制

nginx 缓存机制

作者: 空口言_1d2e | 来源:发表于2020-08-27 11:29 被阅读0次

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

对于缓存,我们大概会有以下问题:
(1)缓存文件放在哪儿?
(2)缓存的空间大小是否可以限定?
(3)如何指定哪些请求被缓存?
(4)缓存的有效期是多久?
(5)对于某些请求,是否可以不走缓存?

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

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

配置示例

http {
...
proxy_cache_path /data/nginx/cache keys_zone=one:10m;

server {
proxy_cache one;
location / {
proxy_pass http://localhost:8000;
}
}
}

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 "hostrequest_uricookie_user"; (2)指定请求至少被发送了多少次以上时才缓存,可以防止低频请求被缓存 例如 proxy_cache_min_uses 5; (3)指定哪些方法的请求被缓存 例如 proxy_cache_methods GET HEAD POST; 缓存有效期 默认情况下,缓存内容是长期存留的,除非缓存的总量超出限制 可以指定缓存有效时间,例如 proxy_cache_valid 200 302 10m; //响应状态码为200 302时,10分钟有效 proxy_cache_valid any 5m; //对应任何状态码,5分钟有效 绕开缓存 例如 proxy_cache_bypasscookie_nocache arg_nocachearg_comment;
如果任何一个参数值不为空,或者不等于0,nginx就不会查找缓存,直接进行代理转发
综合示例

http {
...

// 缓存目录:/data/nginx/cache
// 缓存名称:one
// 缓存占用内存空间:10m
// 加载器每次迭代过程最多执行300毫秒
// 加载器每次迭代过程中最多加载200个文件
// 缓存硬盘空间最多为 200m
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 
loader_files=200 max_size=200m;

server {
listen 8080;

// 使用名称为one的缓存
proxy_cache one; 

location / {
// 此location中使用默认的缓存配置
proxy_pass http://backend1;
}

location /some/path {
proxy_pass http://backend2;

// 缓存有效期为1分钟
proxy_cache_valid any 1m;

// 被请求3次以上时才缓存
proxy_cache_min_uses 3;

// 请求中有下面参数值时不走缓存
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
}
}
}

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

相关文章

  • vue项目在nginx配置缓存策略

    nginx开启缓存机制: 在/etc/nginx/sites-available/default文件加入如下代码表...

  • nginx 缓存(11)

    介绍nginx是如何设置缓存之前,我们还是先聊聊web浏览器的缓存机制。 1.浏览器缓存 浏览器的缓存机制也就是我...

  • 【NGINX入门】3.Nginx的缓存服务器proxy_cach

    1. 摘要 本文介绍NGINX缓存机制,配置和参数说明。 2. 内容 2.1 nginx缓存的优点 如图所示,ng...

  • nginx 缓存机制

    Nginx缓存的基本思路基本思想是利用客户访问的时间局部性原理,对客户已经访问过的内容在Nginx服务器本地建立副...

  • NGINX----模块----缓存

    如果有人问你怎么优化网站,那么你一定要告诉他使用缓存,nginx有着简单方便的缓存机制。 存放放在哪? nginx...

  • Nginx代理缓存机制

    1. Nginx的简介 相关内容,可以查看 【Nginx 负载均衡[https://www.jianshu.com...

  • Ip限制

    2秒之内访问次数超过100,加入黑名单。 可用redis的过期缓存机制来实现频繁访问的缓存功能。 nginx中限制...

  • 计算机网络----http缓存控制知识整理

    http缓存机制在使用nginx设定静态资源是否被缓存时就会被用到,当初做项目时就遇到这个触及我知识盲区的问题。所...

  • nginx缓存不起作用问题解决方法

    1. nginx不缓存原因 默认情况下,nginx是否缓存是由nginx缓存服务器与源服务器共同决定的, 缓存服务...

  • Nginx 代理缓存

    Nginx的缓存可以简单分成web缓存和代理缓存,本篇文章主要介绍代理缓存。 web缓存 Nginx提供了expi...

网友评论

      本文标题:nginx 缓存机制

      本文链接:https://www.haomeiwen.com/subject/blfcsktx.html