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 拒绝服务攻击》

相关推荐
学编程的小菜鸟1 分钟前
分布式锁?一个注解就搞定了
java
爱上语文3 分钟前
苍穹外卖 添加购物车接口
java·数据库·spring boot·后端·mybatis
伏飞而行17 分钟前
六、元素应用CSS的习题
1024程序员节
梅见十柒20 分钟前
数据结构与算法分析——你真的理解查找算法吗——基于散列的查找(代码详解+万字长文)
java·c语言·c++·笔记·算法·哈希算法·查找算法
JAVA在开发hui27 分钟前
基于 Java 的 Spring Boot 和 Vue 的宠物领养系统设计与实现
java·开发语言·宠物
idealzouhu30 分钟前
Spring Boot 实现文件上传下载功能
java·spring boot·1024程序员节
VaporGas38 分钟前
Java设计模式-单例模式和工厂模式的思路解析
java·单例模式·设计模式
carl.xu41 分钟前
QNX 7.0.0开发总结
java·大数据·开发语言
sudo_Ene43 分钟前
Isaac Sim Docker 部署并使用过程记录
笔记·学习·docker·1024程序员节·isaacsim
2401_858120261 小时前
探索自然之美:SpringBoot驱动的安康旅游网站开发
java·spring boot·旅游