为什么NginX和Lighttpd不受Slowloris的影响?


Answers:


25

Apache具有“最大客户数”的理论

那是它可以处理的同时连接数。IE如果apache服务器的“最大客户端”限制为100,并且每个请求需要1秒才能完成,则它每秒最多可以处理100个请求。

像SlowLoris这样的应用程序将向服务器发送大量连接,在我们的示例中,如果SlowLoris每秒发送200个连接,而Apache每秒只能处理100个连接,则连接队列将不断增大并用尽计算机上的所有内存,从而将其连接到跳楼 这类似于匿名者的LOIC的工作方式。

NGINX和Lighttpd(还有其他)没有最大连接数,而是使用辅助线程,因此,从理论上讲,它们可以处理的连接数没有限制。
如果监视Apache连接,您会看到大多数活动连接是来自客户端的“正在发送”或“正在接收”数据。在NGINX / Lighttpd中,它们只是忽略这些请求,而让它们在后台运行,而不用消耗系统资源,它只需要处理正在进行的连接(解析响应,从后端服务器读取数据等)。

我实际上在今天下午回答了一个类似的问题,因此其中的信息可能对您也很有趣减少Apache请求排队


很好,很详细的答案。+1
Oldskool

6
较小的修正:nginx不使用辅助线程来实现大量连接。来自nginx.org:“Nginx不依赖线程来处理请求。它使用更具可伸缩性的事件驱动(异步)架构”
日,

2
尽管可能会有副作用,但Slowloris的目的不是“用完计算机上的所有内存”,而是耗尽最大连接容量,从而拒绝后续连接成功。
wulfgarpro

@Day Nginx确实使用工作线程来支持其异步操作。此处提供了有用的应用程序架构示意图:aosabook.org/en/nginx.html#fig.nginx.arch
Terry Burton


8

valyala的评论应被接受为答案。

大多数Nginx服务器使用默认配置,因此容易受到lowloris攻击。我曾经用过lowlowris仅使用我的笔记本电脑就关闭了我朋友的一些nginx网站,通常花了不到5分钟的时间(我的朋友挑战我这样做)。

正如valyala所说,从技术上讲,nginx不会受到lowloris的攻击,但是默认配置会限制最大连接数,因此,当连接数超过该数目时,nginx会丢弃新请求,从而导致拒绝服务。

保护Nginx免受缓慢攻击的已知方法包括限制来自同一IP的连接数,以及增加worker_connections配置。攻击仍然可以进行,但难度会更大(也许需要5分钟以上的时间?:D)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.