Nginx: 代理场景下Nginx接收用户请求包体的处理

news2024/9/21 0:31:07

Nginx 反向代理图

  • 当用户发过来一个request body的时候,Nginx 是如何处理这样一个body
  • 这个body 它对应的就是我们客户请求的一些具体内容

1 )proxy_request_bufering 指令

  • 接收包体的两种方式
    • 接收完全部包体再发送
    • 一边接收包体一边发送
  • 接收包体的两种方式切换的相关指令
    • 语法:proxy_request_bufering on | off;
      • on 会在nginx上打开缓冲区(内存buffer),来缓存用户发送过来的请求包体
      • nginx 收到后一次性的转发给上游应用程序服务器
      • off 则不缓存,收到多少,转发多少
    • 默认值:proxy_request_buffering on;
    • 上下文:http、server、location
  • 配置成 on 的好处
    • 吞吐量要求比较高
    • 上游服务并发处理能力低
  • 配置成 off 的要求

    • 要求 应用程序服务器和Nginx服务器协调性能好
    • 如果两者性能匹配差距过大,则可能会出现瓶颈
  • 配置成 off 的好处

    • 更及时的响应
    • 减少Nginx磁盘IO

2 )client_max_body_size 指令

  • 决定 Nginx 能够处理的请求体的大小
  • 语法:client_max_body_size size;
  • 默认值:client_max_body_size 1M;
  • 上下文:http、server、location

3 )client_body_buffer_size

  • 设定的 buffer 缓冲区大小
  • 语法:client_body_buffer_size size;
  • 默认值:client_body_buffer_size 8k | 16k;
    • 32 位和64位系统的区别,8k 和 16k
    • 仅仅是默认值,可自行修改
  • 上下文:http、server、location

4 )场景

4.1 请求体过大

4.2 请求体小于缓存大小

4.3 请求体大于缓存缓存大小 (这里不能大于 client_max_body_size 的大小)

  • 请求体大小在请求头中的 Content-Length 中会保存, 这个HTTP请求中的请求头会有 Content-Length 字段,这个字段后面保存的值,就是我们整个请求的大小

5 ) client_body_in_single_buffer 指令

  • 请求体会分散到一块连续的空间,而非离散的存储,有利于提高性能
  • 语法:client_body_in_single_buffer on | off;
  • 默认值:client_body_in_single_buffer off;
  • 上下文:http、server、location

6 ) client_body_temp_path 指令

  • 请求体大于缓存设置大小,则将请求体临时存放的目录,nginx重启后会自动创建该目录
  • 语法:client_body_temp_path path [level1][level2][level3];
  • 默认值:client_body_temp_path client_body_temp;
    • client_body_temp 是默认目录名称,会在 nginx 根目录会存在
  • 上下文:http、server、location

7 )client_body_in_file_only 指令

  • 请求体是否会存放在磁盘文件上,on和clean 类似,但是 clean 会在请求完成后清理
  • 语法:client_body_in_file_only on | clean | off;
  • 默认值:client_body_in_file_only off;
  • 上下文:http、server、location

8 )client_body_timeout 指令

  • 指定用户和nginx建立连接之后没有发送请求体的超时时间,超时后自动断开
  • 语法:client_body_timeout time;
  • 默认值:client_body_timeout 60s
  • 上下文:http、server、location

9 )配置示例

9.1 Nginx 配置

upstream test_server {
	server 192.168.184.20:9001 weight=2 fail_timeout=10s max_fails=3;
}

server {
	listen 				80;
	server_name 	receive_body.baidu.com;
	location /receive/ {
		proxy_pass                    http://test_server;
		client_max_body_size        150k;
		# client_body_buffer_size      100k;
		# client_body_temp_path test_body_path; # 这个配置,重启nginx后会自动创建这个目录
		
		# client_body_in_file_only on; # 这个配合上面的 client_body_temp_path
		# client_body_in_single_buffer on;
		
		# proxy_request_buffering on;
		# clent_body_timeout 30;
}

9.2 后端上游应用服务器(这里也用nginx模拟)

server {
	listen 9001;
	server_name localhost;
	
	location / {
		return 200 'Proxy OK\n';
	}
}

9.3 测试

  • $ curl -F "file=@/opt/nginx/conf.d/space.jpg" receive_body.baidu.com/receive
    • 注意,这个请求的 receive_body.baidu.com 代表 nginx 服务器
    • 而且,客户端已经配置好 本地 hosts
    • 可以验证,如果文件过大,则会返回 413 Request Entity Too Large
    • 如果没有限制,则正常返回 Proxy OK
  • client_body_temp_path 这个,请求体存到磁盘没有在内存中高效,但是这个需结合业务场景
  • 除了上面,可以打开注释内容,进行其他的测试

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

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

相关文章

前端项目部署到服务器上(nginx)

我这个之前已经部署过项目,所以要进行这个操作 docker imagedocker rm -f nginx //用于强制删除名为“nginx”的容器docker ps //用于列出当前正在运行的Docker容器docker volume -fdocker volume prune //用于删除所有未使用的Docker数据卷,‌释放存…

day11JS-面向对象和js中的设计模式

1. 面向对象 1.1 什么是面向对象 面向对象是一种编程思想,JS就是基于这个思想构建出来的一门编程语言,所以JS中存在对象、类、实例的概念。 对象:万物皆对象。 构造函数(类):把具有某一特征的内容可以划分…

穿梭虚实之间:3DGS与NeRF如何辅助机器人遥控操作?

导读: 本研究介绍了一种用于机器人遥控操作的新型辐射场可视化技术,研究者提出了一种在线训练辐射场的方法,能够实时从多个摄像头获取数据,支持多种辐射方法,包括NeRF和3DGS。该系统与现有的ROS遥控操作系统集成&#…

惠海H6501 DCDC降压恒压ic 60V72V80V100V转24V36V48V实地架构低功耗 仪表仪器供电 兼容XX9487

H6501是一款高压降压型开关稳压器,可输出高达1A的持续电流至负载。它集成了一个 高压高端MOSFET,提供2.5A的典型峰值电流限。其4.5V至48V的宽输入电压范围可适用于各种降压应用,是汽车、工业和照明应用的理想之选。采用滞环电压控制模式&…

行为识别实战第二天——Yolov5+SlowFast+deepsort: Action Detection(PytorchVideo)

Yolov5SlowFastdeepsort 一、简介 YoloV5SlowFastDeepSort 是一个结合了目标检测、动作识别和目标跟踪技术的视频处理框架。这一集成系统利用了各自领域中的先进技术,为视频监控、体育分析、人机交互等应用提供了一种强大的解决方案。 1. 组件说明: Y…

golang笔记——Go堆内存管理

前言 本文主要记录个人学习Golang堆内存管理,涉及到的相关内容,算是对个人所学知识点的梳理与总结。从非常宏观的角度看,Go的堆内存管理就是下图这个样子 学习内存管理,肯定首先需要了解内存管理的基本知识,我会按照 内…

C++笔记10•容器适配器:stackqueue priority_queue•

从C中看stack&queue&priority_queue 1.stack的介绍 官方stack实现: 本质是一个数组 1. stack 是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack 是作为容器适…

【C/C++】typedef用法

typedef用法讲解&#xff0c;时隔半年&#xff0c;再看typedef。 &#x1f381;typedef可以简化结构体关键字 #include<iostream> using namespace std;struct Person {char name[64];int age; };void test01() {struct Person p { "张三",18 };//不用type…

【设计模式-代理】

定义 代理模式是一种结构型设计模式&#xff0c;它提供了对象的替代者或占位符&#xff0c;用来控制对这个对象的访问。通过代理模式&#xff0c;一个类可以代表另一个类来执行某些操作。这种模式常用于增强对象的功能或控制对对象的访问。 特点 控制访问&#xff1a;代理模…

day01 1.c++对c的扩充

#include <iostream>using namespace std;int main() {string s1;cout << "请输入一个字符串&#xff1a;";getline(cin,s1);int count10,count20,count30,count40;int len s1.length();for(int i0;i<len;i){if((s1[i]>a&&s1[i]<z) ||…

BeanPostProcessor和Ordered

1. 概述 BeanPostProcessor 和 Ordered 接口用于在Spring容器初始化Bean的过程中进行自定义处理&#xff0c;并控制处理顺序 2. BeanPostProcessor BeanPostProcessor 接口允许你在Spring容器初始化Bean的前后对Bean进行自定义处理。它有两个方法&#xff1a; postProcessB…

zabbix对接Grafana

1.grafana安装 Download Grafana | Grafana Labs sudo yum install -y https://dl.grafana.com/oss/release/grafana-11.1.4-1.x86_64.rpm 2.zabbix插件安装 Grafana 默认并没有 zabbix 数据源的支持&#xff0c;只有安装了zabbix插件&#xff0c;才可以在grafana中添加zabbi…

峟思固定测斜仪的工作原理与应用

固定测斜仪作为一种精密的测量仪器&#xff0c;在地质工程、土木工程、矿山安全等领域中发挥着至关重要的作用。它通过测量土体或岩体内部的水平位移&#xff0c;为工程安全监测提供了可靠的数据支持。本文将详细介绍固定测斜仪的工作原理、结构组成以及其在实际应用中的表现。…

一文读懂 DDD领域驱动设计

DDD&#xff08;Domain-Driven Design&#xff0c;领域驱动设计&#xff09;是一种软件开发方法&#xff0c;它强调软件系统设计应该以问题领域为中心&#xff0c;而不是技术实现为主导。DDD通过一系列手段如统一语言、业务抽象、领域划分和领域建模等来控制软件复杂度&#xf…

快手小店自动回复机器人脚本

快手小店自动回复机器人是一种利用人工智能AI技术&#xff0c;能够根据用户的会话咨询内容自动回复的工具。这种机器人可以帮助快手小店主快速、高效地回复客户消息&#xff0c;提升店铺的客户服务质量和销售效率。 甜羊浏览器是一款基于Chromium内核开发的国产浏览器&#xff…

OpenAI API: How to count tokens before API request

题意&#xff1a;“OpenAI API&#xff1a;如何在 API 请求之前计算令牌数量” 问题背景&#xff1a; I would like to count the tokens of my OpenAI API request in R before sending it (version gpt-3.5-turbo). Since the OpenAI API has rate limits, this seems impor…

记录一次target引发的事故:一直提示数据库连接超时

你们好&#xff0c;我是金金金。 场景 启动项目&#xff0c;一直报数据库连接超时&#xff1a; The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. The error may exist in com/xuecheng/sy…

【分立元件】以太网变压器中心抽头有什么作用?

在以太网设备中,通过 PHY 接 RJ45 时,中间都会加一个网络变压器。 但查看不同产品的设计,有的变压器中心抽头接电源,有的又接电容到地。而且接电源时,电源值又可以不一样,3.3V,2.5V,1.8V都有。这个变压器的中心抽头作用到底是什么呢? 中心抽头作用 1. 通过提…

云渲染解决:笔记本渲染很伤电脑吗?如何保护你的电脑?

笔记本电脑是设计师、视频剪辑师和3D艺术家的重要工具&#xff0c;提供随时随地的创作能力。但渲染工作可能对笔记本造成损害。本文将分析渲染对笔记本的影响&#xff0c;并提供减少损伤的策略&#xff0c;帮助用户保持设备在创作中的高效与安全。 一、笔记本电脑渲染的影响 电…

【html+css 绚丽Loading】 000020 三才流转盘

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…