每隔一段时间,一堆非常慢的HTTP客户端决定从我的网站上删除页面。 这是不好的,因为当他们有足够的人这样做时,它大大降低了可用于处理来自世界其他地方的请求的免费Apache进程的数量。 我不知道这是一些蹩脚的DDoS攻击还是只是非常慢的客户端。
在过去的几年里,我知道徘徊是解决这个问题的方法。 但是这几天似乎没有太多的活动。 事实上,在Debian中没有一个懒散的软件包(有一个旧的非官方的软件包)表明有更好的方法。
我一直在使用mod_limitipconn来部分解决这个问题,但是我需要保持这个数字足够高,以免影响正常的浏览器。 这使得它成为了一种半分的解决scheme。 在我看来,我可以把鱿鱼放在Apache面前,但这似乎有点重量级。 或者,也许我对乌贼的印象是倾斜的。
无论如何,我正在寻找想法或指向我已经错过的明显的事情。
想法?
如果这是一个DDoS攻击,你会看到许多这样的连接从多个地点。 你的问题中没有给出任何统计数据,所以我们不能真正判断。
如果许多缓慢的请求来自同一个位置,特别是如果他们是为了一个大对象,可能是你有人用下载pipe理器打开许多连接。
如果您因为某些原因未能lockingApache,那么可以考虑转而使用基于事件驱动架构的服务器,而不是基于威胁/进程的服务器,比如nginx。 这些允许并发连接的数量可以更有效地扩展,因为每个基本的请求通过额外的资源(特别是RAM)需要的很less – 虽然对脚本资源的请求的可扩展性可以根据您的设置而变化很大, modPHP(除非你已经在(faast)CGI模式下运行它)可以做更多的工作来设置实例,当然你也可能使用Apache以外的其他模块/function。
你也可以分配更多的内存,并增加Apache进程/线程的最大数量。
这两个解决scheme之间的中间是,如果缓慢的请求是静态资源,您可以使用轻量级Web服务器来提供静态内容(比Apache更less的RAM),并代理脚本请求(和其他需求除了提供文件之外的其他function)到Apache的设置。 许多大型重载网站以类似的方式进行操作。
关于我的头顶,我不知道一种方法会限制单个请求的时间长度 – 这可能无法解决您的问题,因为无论是在DoS环境中还是在下载pipe理器中,新连接都将立即尝试。