当前位置: 首页 > news >正文

面试宝典系列-nginx的缓冲和缓存

为什么80%的码农都做不了架构师?>>>   hot3.png

缓冲:用缓冲解放后端

反向代理的一个问题是代理大量用户时会增加服务器进程的性能冲击影响。在大多数情况下,可以很大程度上能通过利用Nginx的缓冲和缓存功能减轻。

缓冲就是nginx代理缓冲从后端服务器返回的数据,供传递给客户端。缓冲完成后nginx代理和后端服务器就可以断开连接了。解决了由于客户端性能慢而导致与后端服务器长时间连接问题,释放后台进程。

场景:从客户机到Nginx代理的连接,从Nginx代理到后端服务器的连接。

如果没有缓冲,数据从代理的后端服务器发送并立即开始被发送到客户。如果假定客户端很快,缓冲可以关闭而尽快使数据到客户端,有了缓冲,Nginx代理将暂时存储后端的响应,然后按需供给数据给客户端。如果客户端是缓慢的,允许Nginx服务器关闭到后端的连接。然后,Nginx服务器可以处理数据分配到客户端,以任何可能的速度。

Nginx默认启用缓冲,因为客户端的连接速度一般来说是差别很大的。

缓冲的配置:

# 控制本内容块下(包括子内容块)是否启用缓冲,默认为“on”
proxy_buffering on;

# 后端回复结果的首段(包含header的部分)是单独缓冲的,本条目定义这部分的缓冲区大小。
proxy_buffer_size 1k;

# 有两个参数,第一个控制缓冲区请求数量,第二个控制缓冲区大小。
proxy_buffers 24 4k;

# 设置被标记为“client-ready”(客户端就绪)的缓冲区大小。客户端一次只能从一个缓冲读取数据,而缓冲是按照队列次序被分批发送给客户端的。本条目设置的值就是这个队列的大小。
proxy_busy_buffers_size 8k;

# 每个请求可以存储临时文件的最大大小。如果上游发来的结果太大以至于无法放入一个缓冲,则Nginx会为其创建临时文件。
proxy_max_temp_file_size 2048m;

# 当上传的文件大于此值时,nginx会先将文件写入“proxy_temp_path ”缓存目录
proxy_max_temp_file_size 32k;

# 当被代理服务器的响应过大时Nginx一次性写入临时文件的数据量。
proxy_temp_file_write_size 32k;

# 定义Nginx存储临时文件的路径。
proxy_temp_path /usr/local/nginx/proxy_temp

缓存:配置代理服务缓存来减少响应时间

nginx采用一种方法来缓存从后端服务器的内容,对于许多请求无需连接到上游(后端服务器)。

缓存配置:

# 存储缓存的目录 levels=参数指定缓存将如何组织 keys_zone=参数定义缓存区域的名字 MAX_SIZE参数设置实际缓存数据的最大尺寸。
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=backcache:8m max_size=50m;

# 将设置用于存储缓存值的键 此键用于检查是否一个请求可以从高速缓存提供服务
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";

# proxy_cache_valid指令可以被指定多次。它依赖于状态代码值使我们能够配置多长时间存储。下例子中,对于后端返回200和302存储10分钟,404响应的一分钟过期。
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;

转载于:https://my.oschina.net/suyain/blog/2051507

相关文章:

  • GitHub:我们为什么会弃用jQuery?
  • PostgrepSQL(大象)的使用
  • 如何在Ubuntu14.04中创建Python虚拟环境
  • Java日志系统(上)
  • BCH社区意见分歧:引领市场VS迎合市场?
  • 063_Apex 的 Test类说明
  • 前后端分离产生的跨域问题的解决方案之--jsonp、nginx代理、设置头信息等
  • 开篇:Pyhon基础笔记
  • 外国人又玩出新花样,仅需几行CSS代码就能让iPhone重启、Mac卡顿
  • SaaS技术栈的走势
  • 502错误,让你进一步明白nginx和php-fpm之间的关系
  • Oracle数据库-备份整个数据库与还原整个数据库数据
  • JVM:带你查看常见的问题,以及分析处方法
  • Mozilla开发全新的公开网络API WebXR 来实现增强现实
  • 2019物联网博览会
  • ➹使用webpack配置多页面应用(MPA)
  • Angular6错误 Service: No provider for Renderer2
  • Centos6.8 使用rpm安装mysql5.7
  • EOS是什么
  • Fabric架构演变之路
  • Javascripit类型转换比较那点事儿,双等号(==)
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • MySQL几个简单SQL的优化
  • ReactNativeweexDeviceOne对比
  • React系列之 Redux 架构模式
  • Vue ES6 Jade Scss Webpack Gulp
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • WePY 在小程序性能调优上做出的探究
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 从零开始在ubuntu上搭建node开发环境
  • 两列自适应布局方案整理
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​2021半年盘点,不想你错过的重磅新书
  • ​业务双活的数据切换思路设计(下)
  • #laravel 通过手动安装依赖PHPExcel#
  • #Linux(权限管理)
  • (03)光刻——半导体电路的绘制
  • (C语言)fgets与fputs函数详解
  • (SpringBoot)第二章:Spring创建和使用
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (接口封装)
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)shell调试方法
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .CSS-hover 的解释
  • .Net Remoting常用部署结构
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 微服务 服务保护 自动重试 Polly
  • .NET的数据绑定
  • .NET开发人员必知的八个网站
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /var/log/cvslog 太大