http慢攻击 ,用nginx解决

http{
#指定每一个 TCP 链接最多能够保持多长时间
keepalive_timeout  60;  
#为请求头分配一个缓冲区
client_header_buffer_size 1m;
#此指令规定了用于读取大型客户端请求头的缓冲区的最大数量和大小
large_client_header_buffers 4 8k;
#此指令禁用NGINX缓冲区并将请求体存储在临时文件中
client_body_in_file_only clean;
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=200r/s;
   
server {
      listen 8105;
      limit_conn addr 5;
      limit_req zone=one burst=5 nodelay;
#服务端向客户端传输数据的超时时间
      send_timeout 30s;
      #设置NGINX能处理的最大请求主体大小
      client_max_body_size 2M;
      #请求头分配一个缓冲区
      client_body_buffer_size 16k;
      #指定客户端与服务端建立连接后发送 request body 的超时时间
      client_body_timeout 20s;
      #客户端向服务端发送一个完整的 request header 的超时时间
      client_header_timeout 10s;
      #该指令设置NGINX将完整的请求主体存储在单个缓冲区中
      client_body_in_single_buffer on;
      #此指令指定存储请求正文的临时文件的位置
      client_body_temp_path 1 2;
      location / {
			proxy_pass http://127.0.0.1:8155/; #慢攻击的服务端口
           client_max_body_size 128M;
		           }  
           }
} 


Nginx配置详解

============

1、通过调整$request_method,配置服务器接受http包的操作限制;

2、在保证业务不受影响的前提下,调整client_max_body_size, client_body_buffer_size, client_header_buffer_size,large_client_header_buffersclient_body_timeout, client_header_timeout的值,必要时可以适当的增加;

3、对于会话或者相同的ip地址,可以使用HttpLimitReqModule and HttpLimitZoneModule参数去限制请求量或者并发连接数;

4、根据CPU和负载的大小,来配置worker_processes 和 worker_connections的值,公式是:max_clients = worker_processes * worker_connections。

 
nginx 配置详情:
keepalive_timeout 
 

Nginx 使用 keepalive_timeout 来指定 KeepAlive 的超时时间(timeout)。指定每个 TCP 连接最多可以保持多长时间。Nginx 的默认值是 75 秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为 0,就禁止了 keepalive 连接。

 

client_body_timeout
 

指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408Request Timed Out)。

# 配置段: http, server, location

client_body_timeout 20s;

 

client_header_timeout
 

客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408Request Timed Out)。

# 配置段: http, server, location

client_header_timeout 10s;

 

send_timeout
 

服务端向客户端传输数据的超时时间。

# 配置段: http, server, location

send_timeout 30s;

 

client_body_buffer_size

此指令设置用于请求主体的缓冲区大小。 如果主体超过缓冲区大小,则完整主体或其一部分将写入临时文件。 如果NGINX配置为使用文件而不是内存缓冲区,则该指令会被忽略。 默认情况下,该指令为32位系统设置一个8k缓冲区,为64位系统设置一个16k缓冲区。 该指令在NGINX配置的http,server和location区块使用。如下:

server{
      client_body_buffer_size 8k;
}
 

client_max_body_size

此指令设置NGINX能处理的最大请求主体大小。 如果请求大于指定的大小,则NGINX发回HTTP 413Request Entity too large)错误。 如果服务器处理大文件上传,则该指令非常重要。

默认情况下,该指令值为1m。 如下:

server{
      client_max_body_size 2m;
}
 

client_body_in_file_only

此指令禁用NGINX缓冲区并将请求体存储在临时文件中。 文件包含纯文本数据。 该指令在NGINX配置的http,server和location区块使用。 可选值有:
off:该值将禁用文件写入
clean:请求body将被写入文件。 该文件将在处理请求后删除。
on: 请求正文将被写入文件。 处理请求后,将不会删除该文件。
默认情况下,指令值为关闭。 如下:

http{
      client_body_in_file_only clean;
}
 

client_body_in_single_buffer

该指令设置NGINX将完整的请求主体存储在单个缓冲区中。 默认情况下,指令值为off。 如果启用,它将优化读取$request_body变量时涉及的I/O操作。如下例子:

server{
      client_body_in_single_buffer on;
}
 

client_body_temp_path

此指令指定存储请求正文的临时文件的位置。 除了位置之外,指令还可以指定文件是否需要最多三个级别的文件夹层次结构。 级别指定为用于生成文件夹的位数。
默认情况下,NGINX在NGINX安装路径下的client_body_temp文件夹创建临时文件。 如下例子:

server{
      client_body_temp_pathtemp_files 1 2;
      }
该指令生成的文件路径如temp_files/1/05/0000003051。

 

client_header_buffer_size

此指令与client_body_buffer_size类似。 它为请求头分配一个缓冲区。 如果请求头大小大于指定的缓冲区,则使用large_client_header_buffers指令分配更大的缓冲区。如下例子:

http{
      client_header_buffer_size 1m;
      }
 

large_client_header_buffers

此指令规定了用于读取大型客户端请求头的缓冲区的最大数量和大小。 这些缓冲区仅在缺省缓冲区不足时按需分配。 当处理请求或连接转换到保持活动状态时,释放缓冲区。如下例子:

http{
    large_client_header_buffers 4 8k;
   }
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值