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

news/2024/9/18 15:00:44/ 标签: nginx, 运维

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.ppmy.cn/news/1517170.html

相关文章

Android 息屏录音

问题 解决Android录音的息屏之后无法录制声音的问题,看日志发现,录音程序并没有中断,但是录制到的数据均是byte为0的数据,即空数据。 测试机为Android 13系统 废话 网上一搜一大堆,ai也是一问也回答得头头是道&…

【Selenium】UI自动化实践——输入验证码登录

文章目录 实战题目解题方案 实战题目 使用pythonselenium实现输入验证码的UI自动化。登录页面如图: 解题方案 验证码登录需要导入相关模块和库,本文使用的是opencv和ddddocr模块组合,导入方式采用pip3 install opencv-python、pip3 insta…

速盾:cdn是什么发展前景?

CDN(Content Delivery Network)是内容分发网络的缩写,是一种通过将内容存储在离用户最近的服务器上,以提高网站访问速度和内容可用性的技术。CDN的发展前景非常广阔,下面将从技术进步、用户需求和商业价值三个方面来详…

如何满足业主多元需求?开发物业APP,打造智能社区生活

随着智能科技的快速发展,物业管理也逐渐迈入数字化时代。物业app开发成为了提升社区管理效率、改善居民生活质量的重要途径,许多物业管理公司纷纷开发物业App,以提升管理效率、改善用户体验。一款出色的物业APP能够整合居民需求、提升企业服务…

如何选择开放式耳机?2024五大市场热卖推荐

在嘈杂的环境中,选择一款合适的耳机可以让我们既享受音乐又能保持对周围环境的警觉。开放式耳机因其设计特点,允许声音通过空气振动传播,不堵塞耳道,这样既保证了佩戴的舒适性,又能让我们感知周围的声音,提…

探索微服务架构中的动态服务发现与调用:使用 Nacos 与 Spring Cloud OpenFeign 打造高效订单管理系统

1. 背景 在现代微服务架构中,服务之间的通信与协作是非常重要的。Spring Cloud Alibaba 提供了一套完整的微服务解决方案,其中包括 Nacos 用于服务注册与发现,OpenFeign 用于声明式服务调用,Spring Cloud LoadBalancer 用于负载均…

基于asp.net的茶叶销售系统网站附源码

这个一个基于asp.net的webform框架的茶叶销售系统源码,包含前后台,具体详情如下 1.主要功能 主要功能包含用户注册、茶叶浏览、我的购物车、购物订单、商品评论、个 人中心、后台登录、用户管理、商品管理、订单管理、评论管理、发布商品 等等模块。2.…

从国产 3A 大作《黑神话·悟空》的横空出世,深入分析国产游戏在图形渲染、物理引擎、AI等方面的技术亮点,以及这些技术如何推动了游戏体验的提升

深入分析国产游戏在图形渲染、物理引擎、AI等方面的技术亮点,以及这些技术如何推动了游戏体验的提升。 一、图形渲染技术在游戏行业的进步显著推动了视觉效果的提升,增强了玩家的沉浸感。以下是图形渲染领域的一些重要技术及其对游戏体验的影响&#xff…

DORIS - 执行 git submodule update --init --recursive 的目的是什么?

前言 以前,我们学习源码的时候只需要执行克隆命令即可,如下: git clone https://github.com/rocky/doris.git 当我学习DORIS的时候,发现执行完上面的命令后,还需要执行如下命令: git submodule update --init --recur…

[论文笔记]Improving Retrieval Augmented Language Model with Self-Reasoning

引言 今天带来一篇百度提出的关于提升RAG准确率的论文笔记,Improving Retrieval Augmented Language Model with Self-Reasoning。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 检索增强语言模型(Retrie…

linux常见基础命令

Linux基础命令 (下面这些命令都是最常见的命令.更复杂的会在之后的C语言学习陆续深入) 1、 pwd 功能: print work directory的缩写,显示当前目录的绝对路径 2、 cd 功能: change directory的缩写,切换目录 绝对路径:以…

【KDD2024】大数据基础工程技术集群异常检测论文入选

近日,由阿里云计算平台大数据基础工程技术团队主导,与浙江大学合作的论文《Cluster-Wide Task Slowdown Detection in Cloud System》被数据挖掘领域顶会ACM SIGKDD2024接收,该论文从集群整体作业执行情况分布入手,旨在解决集群整…

服务器被渗透的表现及检测方法

本文将详细介绍服务器遭受渗透攻击后的常见症状,并提供一些实用的检测方法。我们还将通过具体的案例和代码示例来帮助读者更好地理解和检测服务器的安全状况。 1. 引言 服务器渗透是指攻击者未经授权访问服务器资源的过程。一旦服务器被成功渗透,可能会…

pgsql导入导出数据

1、pg_dump 进行数据库导出 导出数据库表结构和数据 pg_dump -U postgres -h localhost -d mydatabase -f /path/to/backup.sql-U 用户名-h 主机地址-d 要导出的数据库-f 导出的sql文件 2、pg_dumpall 备份所有数据库 pg_dumpall -U postgres -h localhost -f /path/to/all…

java框架基础--反射

前言 本文将详细讲述反射的基本概念以及反射底层代码的部分实现 反射 就是程序在运行状态时,对于任何一个类,都在仅知道类名的状况下,动态获取该类中的所有属性和方法(包括私有),可以动态地通过该类的对象调用类的属性和方法的机制称为反射机制 是将java中的类映射成一个个对象…

MAVEN 3.9.1安装

WIN系统MAVEN 3.9.1安装 1. 下载 下载官网地址:Index of /dist/maven/maven-3 (apache.org) 百度网盘: 通过网盘分享的文件:apache-maven-3.9.1-bin.zip 链接: https://pan.baidu.com/s/1VKmxrU5Hg6mbEUc43wjQUw 提取码: aua6 –来自百度网…

Linux 常用命令 - lsblk 【查看磁盘(块设备)使用情况】

简介 lsblk 源自于 “list block devices” 的缩写。这个命令用于列出系统中的所有块设备(block devices),比如硬盘、光驱等。它展示块设备的层次结构、大小和挂载点等信息,非常有助于系统管理员理解系统存储结构。 使用方式 l…

Spring:浅谈对SpringBean的认识

一、SpringBean的生命周期 1、实例化bean对象:通过反射的方式进行对象的创建,此时的创建只是在堆空间中申请空间,属性都是默认值。 2、设置对象属性:给对象中的属性进行值的设置工作。 3、检查Aware相关接口并设置相关依赖&#x…

C的温故而知新:位操作(C Primer Plus第十五章)

第十五章:位操作 这一章的篇幅不是很长,但既然能单独作为一章来讲的话,应该蛮重要的,但是我貌似没有总结出多少需要注意、加强记忆的东西,可见在JAVA的日常开发过程中基本不太遇见有关位操作的内容,所以我…

Apache Doris 使用 CBO 和 RBO 结合的优化策略

Apache Doris 在查询优化方面通过结合 RBO 和 CBO,实现了对简单和复杂查询的高效优化。RBO 负责处理常量折叠、子查询改写和谓词下推等基础优化操作,而 CBO 则在 Join Reorder 等复杂场景中发挥作用。这种结合策略使得 Apache Doris 能够在面对各种查询场景时,既能保证优化过…