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 "$host$request_uri$cookie_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_bypass $cookie_nocache $arg_nocache$arg_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 缓存机制相关推荐

  1. Nginx 缓存机制详解!

    点击关注公众号,回复"1024"获取2TB学习资源! Nginx 缓存作为性能优化的一个重要手段,可以极大减轻后端服务器的负载.下面我们将介绍 Nginx 缓存配置的相关指令以及 ...

  2. nginx缓存和flask_cache

    1.使用flask_cache的缓存功能simple模式时,直接启用可以使用,但是如果中间使用nginx代理时,就没有效果了 2.那就直接使用nginx缓存机制 http://blog.csdn.ne ...

  3. nginx 缓存设置

    浏览器缓存原理 浏览器缓存 HTTP协议定义的缓存机制(如:Expires:Cache-control等) 2.浏览器无缓存 3.客户端有缓存 校验过期机制 校验是否过期                ...

  4. 浏览器缓存机制的研究分享

    源宝导读:互联网Web应用大行其道的今天,浏览器已经成为Web应用运行的重要平台.而Web应用对浏览器缓存机制的高效利用,可以大幅提升应用性能和用户体验.本文将对浏览器缓存机制进行系统化的梳理,分享我 ...

  5. ASP.NET Core 缓存技术 及 Nginx 缓存配置

    前言 在Asp.Net Core Nginx部署一文中,主要是讲述的如何利用Nginx来实现应用程序的部署,使用Nginx来部署主要有两大好处,第一是利用Nginx的负载均衡功能,第二是使用Nginx ...

  6. 成果分享:边缘智能视频预取和缓存机制

    本文来源于智能互联网研究组,SIG由来自清华大学深圳国际研究生院.鹏城实验室.南方科技大学等高校科研人员组成.团队成员包括:清华大学江勇教授.鹏城实验室李清副研究员等.目前团队有7名在读博士(清华大学 ...

  7. WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发)

    WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发) 目录 WEB请求过程(http解析,浏览器缓存机制,域名解析,cdn分发) 概述 HTTP解析 HTTP请求头 HTTP响应头 H ...

  8. 使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

    为了提高性能,几乎所有互联网应用都有缓存机制,其中Memcache是使用非常广泛的一个分布式缓存系统.众所周知,LAMP是非常经典的Web架构方式,但是随着Nginx的成熟,越来越多的系统开始转型为L ...

  9. [转] 使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

    为了提高性能,几乎所有互联网应用都有缓存机制,其中Memcache是使用非常广泛的一个分布式缓存系统.众所周知,LAMP是非常经典的Web架构方式,但是随着Nginx的 成熟,越来越多的系统开始转型为 ...

  10. 转:使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

    原文地址:http://blog.codinglabs.org/articles/nginx-memc-and-srcache.html 为了提高性能,几乎所有互联网应用都有缓存机制,其中Memcac ...

最新文章

  1. idea中如何reimport_IDEA中导入新项目遇坑
  2. 一起学nRF51xx 4 -  int
  3. Spring boot部署工程
  4. 中石油训练赛 - DNA(字符串哈希)
  5. shell文件管理jenkins构建过程---window环境下报错:找不到shell文件
  6. oracle连接数达不到上限,Oracle超出最大连接数问题及解决(转)
  7. 网页ui设计模板素材|液体流动效果!
  8. 山东春季高考计算机知识点,山东春季高考专业知识点总结
  9. 【Struts1】--beanutils
  10. Java读写配置文件——Properties类的简要使用笔记
  11. F5 对接 Consul 实现服务发现和服务注册实践
  12. select添加提示语
  13. 使用Simu5G实现车联网V2X通信过程(两个简单的示例)
  14. Vue通过render渲染$Notice
  15. 【迭代式开发】V1软件需求规格说明书——大数据开发实战项目(二)
  16. java8 Arrays.sort 与Arrays.parallelSort
  17. 香港三电视台千人默哀 无线换节目亚视停广告
  18. 人类高质量程序员老李是如何过七夕的?
  19. 向量vector 中主要函数的使用
  20. tesseract 训练入门--记一次50张简单验证码的训练过程

热门文章

  1. Pycharm配置运行/调试时的工作目录
  2. 从内存模型角度说明volatile与synchronized在并发特性方面的区别
  3. 验证服务器的通用性,通用VNFM部署的可行性分析与验证
  4. pytorch不加载fc_PyTorch | 保存和加载模型
  5. effective Java chapter 2创建和销毁对象
  6. 【HDU 6274】Master of sequence【二分答案+下取整转换】
  7. 优先经验回放(Prioritized Experience Replay)
  8. 每日一题/007/级数/设a_n=1-1/2+1/3- ... + (-1)^(n-1)*1/n,求 lim_{n\to\infty}a_n
  9. 京东极速版上线,“杀”入三四五六。。。线市场,一起瞅瞅
  10. SQL语句查询今天、昨天、近7天、近30天、一个月内、上一月 数据