分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html

1. 代理缓冲 proxy_buffer

代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲,Nginx可以在接收完整的响应后再将其发送给客户端,从而提高性能和效率。

① 客户端往往是用户网络,情况复杂,可能出现网络不稳定,速度较慢的情况。而nginx到后端server一般处于同一个机房或者区域,网速稳定且速度极快。

② 如果禁用了缓冲,则在客户端从代理服务器接收响应时,响应将同步发送到客户端。对于需要尽快开始接收响应的快速交互式客户端,此行为可能是可取的。这就会带来一个问题:因为客户端到 nginx 的网速过慢,导致 nginx 只能以一个较慢的速度将响应传给客户端;进而导致后端server也只能以同样较慢的速度传递响应给nginx,造成一次请求连接耗时过长。

③ 启用缓冲后,nginx先将后端的请求响应放入缓冲区中,等到整个响应完成后,再发给客户端。

在这里插入图片描述

开启代理缓冲后,nginx 可以用较快的速度尽可能将响应体读取并缓冲到本地内存或磁盘中,同时根据客户端的网络质量以合适的网速将响应传递给客户端。这样既解决了server端连接过多的问题,也保证了能持续稳定的像客户端传递响应。

1. proxy_buffering 指令

当 proxy_buffering 设置为 off 时,Nginx 将禁用代理缓冲。这意味着当 Nginx 作为代理服务器转发请求时,它将立即将响应从上游服务器传递给客户端,而不会先将响应缓存到 Nginx 服务器上。

使用 proxy_buffering 启用和禁用缓冲,nginx默认为 on 启用缓冲,若要关闭,设置为 off 。

proxy_buffering off;

禁用代理缓冲可以提高实时性和响应速度,特别适用于实时通信、流媒体或需要立即将数据传递给客户端的应用程序。然而,禁用代理缓冲也可能增加上游服务器的负载,因为它们需要即时响应每个请求。

禁用代理缓冲可以提高实时性和响应速度,特别适用于实时通信、流媒体或需要立即将数据传递给客户端的应用程序。然而,禁用代理缓冲也可能增加上游服务器的负载,因为它们需要即时响应每个请求。

2. proxy_buffers 与 proxy_buffer_size 指令

proxy_buffers 指令用于设置代理服务器缓存响应的缓冲区大小和数量。它的语法如下:

proxy_buffers number size;

其中,number 表示缓冲区的数量,size 表示每个缓冲区的大小。例如,如果设置为 proxy_buffers 4 32k; 则会为每个客户端连接分配 4 个缓冲区,每个缓冲区的大小为 32KB。

通常情况下,来自后端服务器响应的第一部分存储在单独的缓冲区中,这个缓冲区存储的是相对较小的响应头部信息,大小通过 proxy_buffer_size 指令进行设置 ,建议将 proxy_buffer_size 设置为小于默认值。默认情况下,proxy_buffer_size 的大小为4k,但可以根据实际需求进行调整。

location / {proxy_buffers 16 4k;proxy_buffer_size 2k;proxy_pass http://localhost:8088;
}

2. 代理缓存

启用缓存后,nginx将响应保存在磁盘中,返回给客户端的数据首先从缓存中获取,这样子相同的请求不用每次都发送给后端服务器,减少到后端请求的数量。

在这里插入图片描述

1. proxy_cache_path 指令

proxy_cache_path 指令用于指定缓存文件存储的路径、缓存文件的格式、缓存文件的最大大小等参数。以下是 proxy_cache_path 的常用参数:

  • path: 缓存文件存储的路径。
  • levels: 缓存文件存储的目录层数。
  • keys_zone: 缓存文件的键值对存储区域。
  • inactive: 缓存文件的过期时间,单位为秒。
  • max_size: 缓存文件的最大大小。
  • use_temp_path: 是否使用临时文件夹存储缓存文件。

例如,以下配置将缓存文件存储在 /var/cache/nginx 目录下,缓存文件的键值对存储区域为 my_cache,缓存文件的过期时间为 10 分钟,缓存文件的最大大小为 1GB:

proxy_cache_path /var/cache/nginx keys_zone=my_cache:10m inactive=10m max_size=1g;

在配置反向代理时,可以使用 proxy_cache 指令启用缓存,例如:

location / {proxy_pass http://backend;proxy_cache my_cache;proxy_cache_valid 200 10m;
}

以上配置将启用缓存,并设置缓存文件的过期时间为 10 分钟。当 Nginx 收到客户端请求时,如果缓存中存在对应的响应,Nginx 将直接返回缓存中的响应,而不是向后端服务器发起请求。

2. proxy_cache_valid 指令

proxy_cache_valid 指令用于设置缓存的有效期。

proxy_cache_valid [code ...] time;

其中,code是HTTP响应状态码,可以是一个或多个,用空格分隔。如果省略code参数,则表示适用于所有状态码。time是缓存的有效期,可以是一个时间段,也可以是一个时间戳。

如果要设置不同状态码的不同缓存时间,可以使用多个proxy_cache_valid指令,例如:

proxy_cache_valid 200 10m;
proxy_cache_valid 404 1m;

这样就表示缓存200状态码的响应10分钟,缓存404状态码的响应1分钟。

3. proxy_cache_min_uses 指令

可以使用 proxy_cache_min_uses 设置相同的key的请求,访问次数超过指定数量才会被缓存。

proxy_cache_min_uses 指令用于设置在缓存服务器中缓存一个响应所需的最小请求数。当一个请求被代理到后端服务器时,如果该请求的响应已经被缓存,Nginx 会将缓存的响应返回给客户端,而不是将请求转发到后端服务器。proxy_cache_min_uses 指令可以控制在缓存服务器中缓存一个响应所需的最小请求数,以避免缓存不必要的响应。当一个响应被缓存时,Nginx 会记录该响应被缓存的时间,并在一定时间后将其从缓存中删除。如果一个响应被缓存的时间太短,那么它可能会被频繁地从缓存中删除和重新缓存,这会浪费缓存服务器的资源。因此,通过设置 proxy_cache_min_uses 指令,可以确保只有经过多次访问的响应才会被缓存,从而提高缓存服务器的效率。

proxy_cache_min_uses 5;

默认情况下,响应无限期地保留在缓存中。仅当缓存超过最大配置大小时,按照时间删除最旧的数据。

3. 应用

proxy_cache_path /var/cache/nginx/data keys_zone=mycache:10m;server {listen 8001;server_name ruoyi.localhost;location / {#设置bufferproxy_buffers 16 4k;proxy_buffer_size 2k;proxy_pass http://localhost:8088;        }location ~ \.(js|css|png|jpg|gif|ico) {#设置cacheproxy_cache mycache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404      1m;proxy_cache_valid any 5m;proxy_pass http://localhost:8088;  }location = /html/ie.html {proxy_cache mycache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404      1m;proxy_cache_valid any 5m;proxy_pass http://localhost:8088;  }location ^~ /fonts/ {proxy_cache mycache;proxy_cache_valid 200 302 10m;proxy_cache_valid 404      1m;proxy_cache_valid any 5m;proxy_pass http://localhost:8088;  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

照耀国产的星火,再度上新!

国产之光,星火闪耀 ⭐ 新时代的星火⭐ 多模态能力⭐ 图像生成与虚拟人视频生成⭐ 音频生成与OCR笔记收藏⭐ 助手模式更新⭐ 插件能力⭐ 代码能力⭐ 写在最后 ⭐ 新时代的星火 在这个快速变革的时代,人工智能正迅猛地催生着前所未有的革命。从医疗到金融…

【管理运筹学】第 5 章 | 整数规划 (1,问题提出与分支定界法)

文章目录 引言一、整数规划问题的提出1.1 整数规划的数学模型1.2 整数规划问题的求解 二、分支定界法2.1 分支与定界2.2 基本求解步骤(一)初始化(二)分支与分支树(三)定界与剪枝(四)…

SpringBoot之HandlerInterceptor拦截器的使用

😀前言 本篇博文是关于拦截器-HandlerInterceptor的使用,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…

Linux 多进程

目录 0x01 linux中特殊的进程 0x02 进程的标识 0x03 创建子进程 0x01 linux中特殊的进程 0号进程:idle进程,系统启动加载的进程1号进程:systemd进程,系统初始化,是所有进程的祖先进程 init2号进程:kthre…

YOLOv5白皮书-第Y6周:模型改进

📌本周任务:模型改进📌 注:对yolov5l.yaml文件中的backbone模块和head模块进行改进。 任务结构图: YOLOv5s网络结构图: 原始模型代码: # YOLOv5 v6.0 backbone backbone:# [from, number, module, args]…

每日汇评:黄金在 200 日移动平均线附近似乎很脆弱,关注美国零售销售

1、金价预计将巩固其近期跌势,至 6 月初以来的最低水平; 2、对美联储再次加息的押注继续限制了贵金属的上涨; 3、金融市场现在期待美国零售销售报告带来一些有意义的推动; 周二金价难以获得任何有意义的牵引力,并在…

Mac RN环境搭建

IOS RN ios android原生环境搭建有时候是真恶心,电脑环境不一样配置也有差异。 我已经安装官网的文档配置了ios环境 执行 npx react-nativelatest init AwesomeProject 报错 然后自己百度查呀执行 gem update --system 说是没有权限,执行失败。因…

POSTGRESQL 关于安装中自动启动的问题 详解

开头还是介绍一下群,如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 &…

OpenSSH 远程升级到 9.4p1

OpenSSH 远程升级到 9.4p1 文章目录 OpenSSH 远程升级到 9.4p1背景升级前提1. 升级 OpenSSL2. 安装并启用Telnet 升级OpenSSH 背景 最近的护网行动,被查出来了好几个关于OpenSSH 的漏洞。这是因为服务器系统安装后,直接使用了系统自带版本的OpenSSH &am…

2023-08-15 linux mipi 屏幕调试:有一个屏幕开机时候不显示,开机后按power 按键休眠唤醒就可以显示。原因是reset gpio 被复用

一、现象:今天更新了一个新版本的buildroot linux sdk ,调试两个mipi 屏幕,这两个屏幕之前在其他的sdk都调好了的,所有直接把配置搬过来。但是有一个屏幕可以正常显示,有一个屏幕开机时候不显示,开机后按po…

CentOS防火墙操作:开启端口、开启、关闭、配置

一、基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firewalld 开机启用 : systemctl enable firewalld systemctl是…

C语言,结构体,结构体大小,

1、结构体: 用于存储不同数据类型的多个相关变量,从而形成一个具有独立性的组合数据类型。 结构体的声明: struct 结构体类型名{ 数据类型 成员1; 数据类型 成员2; 数据类型 成员3; ……… }&#xff1…

转行软件测试四个月学习,第一次面试经过分享

我是去年上半年从销售行业转行到测试的,从销售公司辞职之后选择去培训班培训软件测试,经历了四个月左右的培训,在培训班结课前两周就开始投简历了,在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余&…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心,主要用于海量日志数据的异地扩展备份管理,多条件组合的高效查询,统计和趋势报表生成,设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…

WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调:以下内容仅供学习和测试,一切行为均在…

Keil开发STM32单片机项目的三种方式

STM32单片机相比51单片机,内部结构复杂很多,因此直接对底层寄存器编码,相对复杂,这个需要我们了解芯片手册,对于复杂项目,这些操作可能需要反复编写,因此出现了标准库的方式,对寄存器…

ES中倒排索引机制

在ES的倒排索引机制中有四个重要的名词:Term、Term Dictionary、Term Index、Posting List。 Term(词条):词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词&a…

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…

Java Vue Uniapp MES生产执行管理系统

本MES系统是一款B/S结构、通用的生产执行管理系统,功能强大! 系统基于多年离散智造行业的业务经验组建,主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 联系作者获取

Linux(进程控制)

进程控制 进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因 进程终止进程退出码进程常见退出方法 进程等待进程等待必要性获取子进程status进程等待的方法 阻塞等待与非阻塞等待阻塞等待非阻塞等待 进程替换替换原理替换函数函数解释命名理解 做一个…