分布式 - 服务器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.hqwc.cn/news/69250.html

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

相关文章

地毯(暴力+差分两种方法)

题目描述 在 nx n 的格子上有 m 个地毯。 给出这些地毯的信息,问每个点被多少个地毯覆盖。 输入格式 第一行,两个正整数 n,m。意义如题所述。 接下来 m 行,每行两个坐标 (x_1,y_1) 和 (x_2,y_2),代表一块地毯,左上…

Windows下升级jdk1.8小版本

1.首先下载要升级jdk最新版本,下载地址:Java Downloads | Oracle 中国 2.下载完毕之后,直接双击下载完毕后的文件,进行安装。 3.安装完毕后,调整环境变量至新安装的jdk位置 4.此时,idea启动项目有可能会出…

【交换排序】冒泡排序 与 快速排序

交换排序基本思想: 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 目录 1.冒泡排序 2.快…

ZDH-wemock模块

本次介绍基于版本v5.1.1 目录 项目源码 预览地址 安装包下载地址 wemock模块 wemock模块前端 配置首页 配置mock wemock服务 下载地址 打包 运行 效果展示 项目源码 zdh_web: https://github.com/zhaoyachao/zdh_web zdh_mock: https://github.com/zhaoyachao/z…

Redis专题-队列

Redis专题-队列 首先,想一想 Redis 适合做消息队列吗? 1、消息队列的消息存取需求是什么?redis中的解决方案是什么? 无非就是下面这几点: 0、数据可以顺序读取 1、支持阻塞等待拉取消息 2、支持发布/订阅模式 3、重…

CSS3中的var()函数

目录 定义: 语法: 用法: 定义: var()函数是一个 CSS 函数用于插入自定义属性(有时也被称为“CSS 变量”)的值 语法: var(custom-property-name, value) 函数的第一个参数是要替换的自定义属性…

量化交易接口的开启条件--什么是a股自动交易接口?

a股自动交易接口是指可以通过程序自动进行A股买卖操作的接口。一般情况下,个人投资者可以通过证券公司提供的交易API接口实现自动交易。 通常情况下,a股自动交易接口的开发途径主要有以下几种: 1. 使用第三方交易接口:许多证券经…

gulimall-缓存-缓存使用

文章目录 前言一、本地缓存与分布式缓存1.1 使用缓存1.2 本地缓存1.3 本地模式在分布式下的问题1.4 分布式缓存 二、整合redis测试2.1 引入依赖2.2 配置信息2.3 测试 三、改造三级分类业务3.1 代码改造 四、高并发下缓存失效问题4.1 缓存穿透4.2 缓存雪崩4.3 缓存击穿 五、分布…

jenkins自动化构建保姆级教程(持续更新中)

1.安装 1.1版本说明 访问jenkins官网 https://www.jenkins.io/,进入到首页 点击【Download】按钮进入到jenkins下载界面 左侧显示的是最新的长期支持版本,右侧显示的是最新的可测试版本(可能不稳定),建议使用最新的…

虚拟机的创建与使用

一、虚拟机的下载 链接:百度网盘下载链接 提取码:a9p4 二、新建虚拟机系统 需要有版本序列号 注意: 选择 第一个是纯dos 的窗口指令 桌面没有任何东西 选择第二个就是正常的操作系统.有文件夹 我的电脑之类的 三、从主机中复制文件到虚拟机中需要安装 …

Java-Sec-Code靶场

文章目录 前言1.靶场搭建靶场地址、环境Window环境修改点 靶场通关和源码分析命令注入RCE反序列化fastjson反序列化目录穿越文件上传Spel表达式sql注入poi-ooxml组件XXE 总结 前言 一直都是一个Java盲,但是如今Java却占据了开发的半壁江山,平时遇见的多…

贴吧照片和酷狗音乐简单爬取

爬取的基本步骤 很简单,主要是两大步 向url发起请求 这里注意找准对应资源的url,如果对应资源不让程序代码访问,这里可以伪装成浏览器发起请求。 解析上一步返回的源代码,从中提取想要的资源 这里解析看具体情况,一…