语境:
我有一个视频游戏客户端,它从服务器请求一个 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查看模块