阻止 Apache 生成数百个进程

阻止 Apache 生成数百个进程

语境:

我有一个视频游戏客户端,它从服务器请求一个 php 页面来处理用户登录。这种情况会循环发生(太糟糕了),因此每个客户端都会发出很多请求。我打算修复这个问题,但这不是问题的重点。

之前我的服务器是 Dreamhost VPS。该服务器能够很好地处理所有游戏客户端,仅生成一个 Apache 进程来处理登录。

我刚刚转移到数字海洋服务器,因为我建立了一个新网站,而对于我支付的价格而言,dreamhost 服务器的速度总是很慢。

新的 digital ocean 服务器现在不处理游戏客户端登录。它会为每个请求生成一个新的 Apache 进程,这意味着启动游戏的单个用户将使服务器瘫痪,生成数百个 Apache 进程,直到处理完登录请求。

问题:

我想知道是否可以进行 Apache 配置更改,以限制游戏客户端请求产生的进程。我正在修补游戏,但我不能确定每个用户都会更新。我陷入了困境。如果更改有助于抵御 DDoS 攻击,那就加分了!

服务器运行的是 Ubuntu,使用 Digital oceans 的“Wordpress”镜像。它有 1 GB 的内存,我设置了一个 4 GB 的交换文件以防止网站崩溃。网站速度慢总比网站死掉要好!我尝试在 Apache 级别启用缓存,但我不知道我在做什么,而且我所做的一切都没有任何影响。

答案1

在修补游戏之前,暂时解决此问题的一种方法是使用 Apache 的 mod_qos 模块来限制来自给定 IP 的最大连接数。

您可以使用QS_SrvMaxConnPerIP指令来实现这一点(请参阅http://opensource.adnovum.ch/mod_qos/用于文档)。

当服务器上总共至少有 75 个连接时,将每个 IP 的连接数限制为 20 个的示例如下:

<IfModule mod_qos.c>
    QS_SrvMaxConnPerIP 20 75
</IfModule>

答案2

取决于你的 apache 编译时使用的模块

<IfModule prefork.c>
 MaxConnectionsPerChild 40
 MaxRequestWrokers 10
 MaxSpareServers 13
 MinSpareServer 4
 StartServers 4
 ServerLimit 13
 MaxClients 10

<IfModule mpm_prefork_module>
 MaxConnectionsPerChild 40
 MaxRequestWrokers 10
 MaxSpareServers 13
 MinSpareServer 4
 StartServers 4
 ServerLimit 13
 MaxClients 10
</IfModule>

可以通过httpd -V查看模块

相关内容