当前位置: 首页 > article >正文

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


http://www.kler.cn/a/369867.html

相关文章:

  • 自动化01
  • C语言文件操作
  • Linux系统下速通stm32的clion开发环境配置
  • 机器学习-使用梯度下降最小化均方误差
  • c#的tabControl控件实现自定义标签颜色
  • 怎样使用树莓派自己搭建一套ADS-B信号接收系统
  • 【JavaEE初阶】网络原理(1)
  • 总结test
  • leetcode hot100【LeetCode 226. 翻转二叉树】java实现
  • AI 聊天机器人的兴起:GPT-3 和 BERT 如何重新定义对话体验
  • MySQL8 安装配置及卸载教程
  • 17. 云计算和分布式计算
  • 【python】极简教程17-类和方法
  • 在Linux下使用Typora
  • word记录
  • Rust编程与项目实战-元组
  • 数据库->数据库设计
  • YOLOv8实战野生动物识别
  • 如何确保电子商务网站服务器的正常运行时间
  • linux查看系统架构的命令
  • 【Vue3】第三篇
  • 算法练习:四数之和
  • 数组排序简介-选择排序(Selection Sort)
  • ESP8266学习记录
  • 消息中间件mq*(Kafka)
  • 【C++】How the C++ Compiler Works