2022
我们一起努力

nginx设置请求大小(nginx 大小限制)

本文目录:

  • 1、如何调整nginx和apache服务器的header限制的大小
  • 2、宝塔nginx防火墙请求量大怎么设置
  • 3、8.Nginx的请求限制( limit_conn_zone、 limit_conn、limit_req_zone、limit_req zone)

如何调整nginx和apache服务器的header限制的大小

现在主流的apache和nginx服务器他们都可以自由设置header的头信息上限大小。我们通过配置文件修改来达到目的。

nginx默认的header长度上限是4k,如果超过了这个值

如果header头信息请求超过了,nginx会直接返回400错误

可以通过以下2个参数来调整nginx的header上限

client_header_buffer_size 16k;

large_client_header_buffers 4 16k;

看起来是,nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取

引用client_header_buffer_size

syntax: client_header_buffer_size size

default: 1k

context: http, server

Directive sets the headerbuffer size for the request header from client.

For the overwhelming majority of requests it is completely sufficient a buffer size of 1K.

However if a big cookie is in the request-header or the request has come from a wap-client the header can not be placed in 1K, therefore, the request-header or a line of request-header is not located completely in this buffer nginx allocate a bigger buffer, the size of the bigger buffer can be set with the instruction large_client_header_buffers.

引用large_client_header_buffers

syntax: large_client_header_buffers number size

default: large_client_header_buffers 4 4k/8k

context: http, server

Directive assigns the maximum number and size of buffers for large headers to read from client request.

The request line can not be bigger than the size of one buffer, if the client send a bigger header nginx returns error “Request URI too large” (414).

The longest header line of request also must be not more than the size of one buffer, otherwise the client get the error “Bad request” (400).

Buffers are separated only as needed.

By default the size of one buffer is equal to the size of page, depending on platform this either 4K or 8K, if at the end of working request connection converts to state keep-alive, then these buffers are freed.

对于apache2来说,它默认值是8k

可以调整以下2个参数

LimitRequestLine 16k

LimitRequestFieldSize 16k

LimitRequestLine 指令设置的是每一个header长度的上线

引用LimitRequestLine 指令

说明 限制接受客户端发送的HTTP请求行的字节数

语法 LimitRequestLine bytes

默认值 LimitRequestLine 8190

作用域 server config

状态 核心(C)

模块 core

bytes将设置HTTP请求行的字节数限制。

LimitRequestLine指令允许服务器管理员增加或减少客户端HTTP请求行允许大小的限制。因为请求行包括HTTP方法、URI、协议版本,所以LimitRequestLine指令会限制请求URI的长度。服务器会需要这个值足够大以装载它所有的资源名,包括可能在GET请求中所传递的查询部分的所有信息。

这个指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。

LimitRequestFieldSize指令设置的是所有header总长度的上限值

引用LimitRequestFieldSize 指令

说明 限制客户端发送的请求头的字节数

语法 LimitRequestFieldsize bytes

默认值 LimitRequestFieldsize 8190

作用域 server config

状态 核心(C)

模块 core

bytes指定了HTTP请求头允许的字节大小。

LimitRequestFieldSize指令允许服务器管理员增加或减少HTTP请求头域大小的限制。一般来说,服务器需要此值足够大,以适应普通客户端的任何请求的头域大小。一个普通头域的大小对于不同的客户端来说是有很大差别的,一般与用户配置他们的浏览器以支持更多的内容协议密切相关。SPNEGO的认证头最大可能达到12392字节。

这个指令给了服务器管理员更大的可控性以控制客户端不正常的请求行为。这有助于避免某些形式的拒绝服务攻击。注:该设置在apache root/manual/mod/core.xml中进行设置

宝塔nginx防火墙请求量大怎么设置

宝塔nginx防火墙请求量大怎么设置:通过系统设置中的防火墙。

防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。

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设置请求大小】的内容来源于互联网,如引用不当,请联系我们修改。

赞(0)
文章名称:《nginx设置请求大小(nginx 大小限制)》
文章链接:https://www.fzvps.com/39513.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!