Nginx - 缓慢的 HTTP 拒绝服务攻击

参考链接

https://zhuanlan.zhihu.com/p/677536047

【网络安全】HTTP Slowloris攻击原理解析-CSDN博客

缓慢的http拒绝服务攻击 - 二月无雨 - 博客园

Nginx解决Http慢攻击(Slow HTTP Attack)_nginx 慢拒绝服务攻击-CSDN博客

解决方案

在 nginx.conf 中 http 块里面配置,添加或者调整 client_max_body_size, client_body_buffer_size, client_header_buffer_size,large_client_header_buffersclient_body_timeout, client_header_timeout 的值

各参数说明

client_max_body_size

说明:此配置指令用于设置客户端(如浏览器、API客户端等)向服务器发送请求时,请求体(通常是POST、PUT等方法携带的数据)的最大允许大小 。单位可以是字节(B)、千字节(KB)、兆字节(MB)等。如果客户端发送的请求体大小超过此限制,Nginx将拒绝接收并返回错误响应,通常是HTTP状态码413(Payload Too Large)。此设置有助于防止因客户端上传过大文件或发送过多数据导致服务器资源耗尽。

复制代码
# 例如,请求的请求体最大只能是 200M
client_max_body_size 200M;

client_body_buffer_size

说明:该指令定义了Nginx在处理请求时,用于临时存储客户端请求体数据的缓冲区大小 。当客户端发送的请求体数据小于或等于指定大小时,Nginx可以一次性在内存中接收并处理。如果请求体数据大于缓冲区大小,Nginx会先使用缓冲区存储一部分数据,然后将剩余数据写入磁盘上的临时文件(除非配置了 client_body_in_file_only ,此时始终写入磁盘)。设置合适的缓冲区大小有助于平衡服务器内存使用和处理效率。如果经常处理大文件上传,可以考虑适当增大此值以减少磁盘I/O;反之,如果内存资源有限或主要处理小文件,可适当减小以节省内存。

复制代码
# 例如:
# 如果请求体数据小于等于 10M 的话,就会在内存中接收并处理,
# 如果大于 10M,那么就会再内存中保留10M 的数据,剩下的保存到磁盘上的临时文件
client_body_buffer_size 10M;

client_header_buffer_size

说明:这个配置项决定了Nginx用于接收和暂存客户端请求头信息的缓冲区大小。如果请求头的总大小超过了这个值,Nginx会将请求头信息分散到多个缓冲区中在大多数情况下,标准的请求头不会很大,因此默认值(默认 1 KB**)通常足够使用。**然而,如果客户端发送的请求头特别庞大(例如包含大量Cookie或自定义头信息),可能需要增加此值以防止因请求头过大而导致的错误或性能下降。

复制代码
# 例如
client_header_buffer_size 1M;

large_client_header_buffers

说明:该指令用来设置一组专门用于存储大请求头的缓冲区。不同于 client_header_buffer_size,它允许您指定一个缓冲区的数量( <number> )以及每个缓冲区的大小( <size> 当单个请求头或所有请求头的总大小超过了 client_header_buffer_size **时,Nginx会使用这些大型缓冲区来存储请求头。**设置合理的数量和大小有助于应对包含大量或大尺寸头信息的请求,避免因请求头过大而导致的错误

复制代码
# 例如
large_client_header_buffers 2 1k;

client_body_timeout

说明:此配置项指定了Nginx等待客户端完成请求体(数据)发送的最长时间如果在指定时间内客户端没有发送完全部请求体,Nginx将视为客户端超时,关闭连接并返回错误。设置合适的超时时间可以防止恶意或故障客户端长时间占用连接资源,同时也确保服务器能及时响应正常的请求。

复制代码
# 例如
client_body_timeout 10s;

client_header_timeout

说明:这个配置指令设定了Nginx等待客户端发送完整请求头信息的超时时间 。**如果客户端在指定时间内没有完成所有请求头的发送,Nginx将视其为超时,断开连接并返回错误。**合理设置此超时时间有助于防止客户端缓慢发送请求头或恶意保持连接不发送数据导致服务器资源浪费。

复制代码
# 例如
client_header_timeout 5s;

步骤

1)找到 nginx 配置文件位置

此处为语雀内容卡片,点击链接查看:nginx · 语雀

2)修改配置文件

下面的配置文件只是提供一个参考,按照实际情况来

复制代码
...
http {
  ...
    keepalive_timeout  65;
    client_max_body_size 2m;
    client_body_buffer_size 2m;
    client_header_buffer_size 2k;
    large_client_header_buffers 2 1k;
    client_body_timeout 10s;
    client_header_timeout 5s;
  ...
}
...

3)重新加载配置文件【无需重启 nginx】

复制代码
./nginx -s reload

语雀文档链接:https://www.yuque.com/heyyall/nzzqzk/qx390rqrptepkhzo?singleDoc# 《Nginx - 缓慢的 HTTP 拒绝服务攻击》

相关推荐
JH30734 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
Coder_Boy_5 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
invicinble5 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟5 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖5 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_12498707537 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_7 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.7 小时前
Day06——权限认证-项目集成
java
瑶山7 小时前
Spring Cloud微服务搭建四、集成RocketMQ消息队列
java·spring cloud·微服务·rocketmq·dashboard
abluckyboy7 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法