AB资源网(www.xxab.cn)服务器导航站-找服务器商就上AB资源网
百度360必应搜狗本站头条
【本站公告】:本站互助计划,欢迎有活动的服务器商免费投稿,免费收录,最新收录会在首页展示! - 站长QQ:6502567
当前位置:网站首页 > 技术文档 > 正文

nginx上传限制(nginx 访问限制)

AB资源网 2023-05-05 09:01 131 浏览 0 评论

本文目录:

  • 1、nginx的client_max_body_size解决上传大文件的问题
  • 2、如何解决nginx上传大文件的限制
  • 3、100多k的文件经nginx请求上传要1分钟
  • 4、8.Nginx的请求限制( limit_conn_zone、 limit_conn、limit_req_zone、limit_req zone)
  • 5、上传图片过大时nginx报错

nginx的client_max_body_size解决上传大文件的问题

因为有个上传大文件的功能,修改了springboot 的yml配置文件中的上传配置文件的参数

nginx上传限制(nginx 访问限制)

 maxHttpHeaderSize: 102400000

 maxHttpPostSize: 102400000

无法打开网站,各种js,css资源文件加载不出来报错404,一开始一直检查tomcat应用,但在本地环境和测试内网环境单tomcat都ok,后怀疑

是dc/os配置问题,然后各种上传镜像修改启动应用的服务器,还是不行。

解决办法

通过设置nginx的client_max_body_size解决nginx+java上传大文件的问题: 

用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_size这个参数,否则会中断在nginx的请求中是无法记录到访问的. 

但是还是不行,因为的webserver用的是nginx, google了一下,发现在nginx的conf中添加了一个参数: 

默认是1M,需要增大的话。 

在nginx.conf中增加一句 

client_max_body_size 500m; 

重启即可 

500m表示最大上传500M,需要多大设置多大。

最后发现原因就是 用nginx来做webserver的时,上传大文件时需要特别注意client_max_body_size这个参数,否则会中断在nginx的请求中是无法记录到访问的. 

如何解决nginx上传大文件的限制

在nginx的配置文件里有一项是修改上传文件大小的默认就支持几兆,可以更改的。

100多k的文件经nginx请求上传要1分钟

100多k的文件经nginx请求上传要1分钟的原因是nginx对上传文件大小有限制,而且默认是1M。另外,若上传文件很大,还要适当调整上传超时时间。

8.Nginx的请求限制( limit_conn_zone、 limit_conn、limit_req_zone、limit_req zone)

在配置nginx的过程中我们需要考虑受到攻击或恶意请求的情况,比如单用户恶意发起大量请求,这时Nginx的请求限制可以帮助我们对其进行限制。

连接频率限制 : limit_conn_module

请求频率限制 : limit_req_module

理解:连接频率限制和请求频率限制都可以实现Nginx的请求限制 , 但是他们的实现原理是不一样的 , 区别就在于连接和请求上 , http协议的链接与请求 , http协议是建立在tcp协议之上的,要完成一次http的请求,先要进行tcp的3次握手建立http的连接 , 然后才进行http的request和response(请求和响应) , 现在http1.1以上的版本已经可以实现一次建立http的连接进行多次的http的request和response(请求和响应) ,最后客户端和服务端不断的来发送FIN包和ACK包来保持HTTP的连接 。

如果面对抢购和秒杀需求来限制 , 个人觉得连接频率限制和请求频率限制应该配合使用 , 使用连接频率限制同一IP同时只能有3个连接, 再使用请求频率限制对于同一ip的请求,限制平均速率为5个请求/秒 , 这样是不是比单独只使用一种限制要好很多?

比如只使用连接频率限制 , 由于一次建立http的连接可以进行多次的请求和响应 , 我们无法精确的限制同一ip同时发起多少次的http请求 ;

比如只使用请求频率限制 , 可以精确的限制同一ip1秒只能发起5次的http请求 , 假如同一ip1秒内发起了100000次请求 , 虽然限制了只有5次成功响应 , 但是其他的99995次的请求TCP握手建立http连接是不是会消耗服务器资源?

所以,个人觉得连接频率限制和请求频率限制应该配合使用!

HTTP请求建立在一次TCP连接基础上

一次TCP连接至少产生一次HTTP请求

ngx_http_limit_conn_module模块用于限制每个定义键的连接数,特别是来自单个IP地址的连接数。

未开启 连接限制 时做个压力测试 (不懂ab的可以看看这个文章 , 很简单明了)

这里模拟了10万个请求 , 1000个并发 , 78个请求失败,打开nginx的错误日志查看都是打开文件失败的错误 ( open() “/usr/share/nginx/html/50x.html” failed (24: Too many open files))! 想象一下 , 如果我们是一个商城程序的API接口 , 正常情况下 , 同一个IP下10万个请求1000个并发 , 算不算恶意攻击?那么就需要做一下连接限制了噻 , 具体怎么限制根绝具体的逻辑去处理 , 我们这里简单的限制一下(启用配置示例的连接限制)再次做个压力测试:

开启连接限制对单个IP限制同时只能存在一个连接,这里模拟了10万个请求 , 1000个并发 , 43616个请求失败,打开nginx的错误日志查看下错误全是连接限制的作用(limiting connections by zone “conn_zone”) , 我们知道”现在http1.1以上的版本已经可以实现一次建立http的连接进行多次的http的request和response(请求和响应) ” , 大家想想 , 如果我们需要做一个抢购和秒杀 , 是不是需要对单个抢购和秒杀限制连接单个IP同时只能存在一个或者多个连接的限制?不然人家写个脚本程序运行在十台八台的机器上疯狂的请求怎么办?当然这只是一个比较简单的应用场景 , 更多的还是需要自己思考与摸索.

ngx_http_limit_req_module模块用于限制请求的处理速率,特别是单一的IP地址的请求的处理速率。使用“漏桶”方法进行限制。

语法: limit_req_zone  key zone=name:size rate=rate;

只能在 http 块中使用

此指令用于声明请求限制 zone , zone 可以保存各种 key 的状态, name 是 zone 的唯一标识, size 代表 zone 的内存大小, rate 指定速率限制。

参数详解:

1.key ,

若客户的请求匹配了key,则进入 zone 。可以是文本、变量,通常为Nginx变量。

如 $binary_remote_addr (客户的ip), $uri( 不带参数的请求地址 ) , $request_uri( 带参数的请求地址 ) , $server_name (服务器名称) 。

支持组合使用,使用空格隔开。

2.zone

使用zone=test,指定此zone的名字为test。

3.size

在zone=name后面紧跟 :size ,指定此 zone 的内存大小。如zone=name: 10m ,代表name的共享内存大小为10m。通常情况下,1m可以保存16000个状态。

4.rate

使用rate=1r/s,限制 平均 1秒不超过1个请求。使用rate=1r/m,限制 平均 1分钟不超过1个请求。

例子:

同一ip 不同 请求地址,进入名为 one 的zone,限制速率为 5请求/秒 。

同一ip 同一 请求地址,进入名为 two 的zone,限制速率为 1请求/秒 。

语法: limit_req  zone=name [burst=number] [nodelay];

可在 http, server, location 块中使用

此指令用于设置共享的内存 zone 和最大的突发请求大小。

若请求速率超过了 limit_req_zone 中指定的 rate 但小于 limit_req 中的 burst ,则进行延迟处理,若再超过 burst ,就可以通过设置nodelay对其进行丢弃处理。

参数详解:

1.zone

使用 zone=name 指定使用名为 name 的 zone ,这个 zone 之前使用 limit_req_zone 声明过。

2.burst(可选)

burst用于指定最大突发请求数。许多场景下,单一地限制rate并不能满足需求,设置 burst ,可以延迟处理超过rate限制的请求。

3.nodelay(可选)

如果设置了 nodelay ,在突发请求数大于 burst 时,会丢弃掉这部分请求。因为如果只是延迟处理,就像” 漏斗 “,一旦上面加得快( 请求 ),下面漏的慢( 处理速度 ),” 漏斗 “总会有溢出的时候。这时,丢弃掉溢出的部分就显得很有意义了。

单客户分为三种情况:

请求速率 rate(1r/s) ,正常处理

rate(1r/s) 请求速率 < burst(5r/s) ,大于rate部分延迟

burst(5r/s)  请求速率 ,大于burst部分丢弃(返回503服务暂时不可用)

未开启请求限制时做个压力测试 (不懂ab的可以看看这个文章 , 很简单明了)

这里模拟了10万个请求 , 1000个并发 , 全部请求成功! 想想一下 , 如果我们是一个商城程序的API接口 , 正常情况下,同一个IP下10万个请求算不算恶意攻击?那么就需要做一下请求限制了噻 , 具体怎么限制根绝具体的逻辑去处理 , 我们这里简单的限制一下:

同一ip请求,进入名为req_zone的zone,限制速率为20次请求/秒,

超过部分进行延迟处理,若超过10个请求/秒,丢弃超过部分。

修改了配置之后平滑重启一下nginx -s reload , 再次使用之前的参数做个压力测试看看

同一IP发起了请求10万次, nginx只接受处理了100次,是不是nginx的压力一下子就小了

上传图片过大时nginx报错

项目用到spring cloud,前端项目使用nginx进行代理,在上传大图片时时间过长,在页面的F1中查看接口状态,发现报500的错误,这是在后台服务中的网关服务的日志中发现报连接后台上传服务超时没有返回,这时去查看网关zuul的配置文件,修改一下相关的时间超时配置。修改后如下,将超时时间适当的配置大一些。

hystrix:

  command:

    default:

      execution:

        isolation:

          thread:

            timeoutInMilliseconds: 300000

ribbon:

  ConnectTimeout: 300000

  ReadTimeout: 300000

修改了如上配置后,在zuul中不报超时的错误了,但是上传大文件的时候还是失败,但是错误变成了504超时,这时发现是nginx配置的超时时间过小导致的,对nginx的配置文件添加相应的超时配置。

#该指令设置与upstream server的连接超时时间

    proxy_connect_timeout 750;

#该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间

proxy_read_timeout 6000;

    fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

这两个选项.

        fastcgi_read_timeout是指fastcgi进程向nginx进程发送response的整个过程的超时时间

        fastcgi_send_timeout是指nginx进程向fastcgi进程发送request的整个过程的超时时间

这两个选项默认都是秒(s),可以手动指定为分钟(m),小时(h)等

通过上面的配置之后图片可以正常上传上去,虽然花费的时间较长,但总算是传上去了。

【nginx上传限制】的内容来源于互联网,如引用不当,请联系我们修改。

腾讯云

相关推荐

云主机FTP软件:高效传输与安全管理的一站式解决方案

在云计算时代,云主机已成为企业和个人用户托管应用和存储数据的首选。为了方便文件传输,FTP(文件传输协议)软件在云主机环境中扮演着重要角色。本文将详细介绍如何在云主机上配置和使用FTP软件...

云主机FP:引领未来计算,解锁无限可能

云主机FP(FloatingPoint)是指在云计算环境中,针对浮点运算性能进行优化的虚拟机实例。浮点运算在科学计算、工程模拟、金融建模、图形处理等领域中占据重要地位,因此云主机FP的设计和配置...

云主机ECS:解锁企业数字化转型的新引擎,高效、安全、灵活的云计算解决方案

云主机ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,它允许用户在云端创建和管理虚拟机实例。ECS的核心优势在于其灵活性和可扩展性,能够满足各种规模和类型的业...

云主机D盘:解锁无限存储空间,轻松应对大数据挑战!

云主机是一种基于云计算技术的虚拟化服务器,它允许用户在云平台上创建、配置和管理虚拟机实例。在云主机中,磁盘分区是存储数据的关键部分,通常包括系统盘和数据盘。系统盘用于安装操作系统和运行应用...

云主机DNS解析:提升网站速度与稳定性的关键策略

云主机DNS(DomainNameSystem)是云计算环境中至关重要的一部分,它负责将域名转换为IP地址,从而使得用户能够通过易于记忆的域名访问云主机上的服务和应用。本文将深入探讨云主机DNS...

云主机C盘爆满?快速解决方法大揭秘,让你的服务器重获新生!

云主机C盘满了是一个常见但棘手的问题,尤其对于依赖云服务进行日常运营的企业和个人用户来说,这可能导致系统性能下降、应用程序崩溃,甚至数据丢失。本文将详细探讨云主机C盘满的原因、影响以及解决方法。...

云主机CPU选择指南:提升性能与效率的关键决策

在选择云主机的CPU时,用户需要考虑多个因素,以确保所选的CPU能够满足其应用的需求,同时优化成本效益。以下是一些关键点,帮助用户在云主机CPU选择过程中做出明智的决策。了解应用的性能需求...

云主机CPU性能大比拼:揭秘顶级云服务商的核心竞争力

云主机CPU是云计算环境中至关重要的组成部分,它直接影响着云服务的性能、稳定性和用户体验。CPU,即中央处理器,是计算机系统的核心,负责执行指令和处理数据。在云主机中,CPU的性能决定了虚...

云主机ASP:高效搭建动态网站,轻松实现业务扩展与性能优化

云主机ASP(ActiveServerPages)是一种在云环境中运行ASP应用程序的技术。ASP是一种由微软开发的动态网页技术,允许开发者使用VBScript或JScript等脚本语言编写服务...

云主机API:解锁无限可能,引领企业数字化转型新纪元

云主机API(ApplicationProgrammingInterface)是云计算服务提供商为用户提供的一种编程接口,允许开发者通过编程方式管理和操作云主机资源。这些API通常基于RESTf...

云主机99idc:高效稳定,轻松搭建您的专属云端空间,一键部署,畅享无限可能!

云主机99idc是一家专注于提供云计算服务的公司,其核心业务是为企业和个人用户提供高性能、高可靠性的云主机服务。随着数字化转型的加速,云计算已经成为企业IT基础设施的重要组成部分,而云主机99i...

云主机80端口:解锁无限可能,开启高效网络新时代!

云主机是一种基于云计算技术的虚拟化服务器,它通过互联网提供计算资源和服务。在云主机中,80端口是一个非常重要的端口,通常用于HTTP协议,即网页服务。本文将详细探讨云主机80端口的相关内容...

云主机403错误:解锁高效解决方案,提升网站性能与安全

云主机403错误是一个常见的网络问题,通常表示用户在尝试访问某个资源时被服务器拒绝。这种错误可能由多种原因引起,包括权限问题、配置错误、防火墙设置等。以下是关于云主机403错误的一些详细信...

云主机360:全方位云端解决方案,助力企业数字化转型无忧

云主机360是一种基于云计算技术的虚拟化服务器解决方案,它通过将物理服务器资源虚拟化,为用户提供灵活、高效、安全的计算服务。云主机360的核心优势在于其高度的可扩展性和弹性,用户可以根据业务需求...

云主机301:引领未来云计算的新纪元,高效稳定,助力企业数字化转型!

云主机301是一种常见的网络重定向状态码,通常用于指示用户请求的资源已被永久移动到新的URL。在云计算环境中,云主机301状态码的出现可能涉及到多种技术和管理策略,下面我们将详细探讨这一现象。...

取消回复欢迎 发表评论: