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

相关推荐
呆呆小雅几秒前
C#关键字volatile
java·redis·c#
Monly211 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
Ttang233 分钟前
Tomcat原理(6)——tomcat完整实现
java·tomcat
钱多多_qdd14 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring
waicsdn_haha16 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
okok__TXF24 分钟前
Nginx + Lua脚本打配合
nginx·lua
Q_192849990626 分钟前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
Code_流苏28 分钟前
VSCode搭建Java开发环境 2024保姆级安装教程(Java环境搭建+VSCode安装+运行测试+背景图设置)
java·ide·vscode·搭建·java开发环境
青灯文案131 分钟前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
小屁不止是运维42 分钟前
麒麟操作系统服务架构保姆级教程(五)NGINX中间件详解
linux·运维·服务器·nginx·中间件·架构