参考链接
https://zhuanlan.zhihu.com/p/677536047
【网络安全】HTTP Slowloris攻击原理解析-CSDN博客
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 拒绝服务攻击》