Jer*_*oen 2 linux hosting bandwidth-control apache-2.2
我正在托管一个公共的 CPU 网络服务,我想将 Apache2 配置为每个 IP 地址只允许 1 个同时连接到手头的位置,以防止单个客户端使用太多资源。
是否有一个简洁的 apache2 解决方案来做到这一点?我已经研究过 mod_bw 但这似乎并没有解决问题(MaxConnections 仅适用于所有用户,而不适用于每个 IP)。还有一个名为 apache2-mod-limitipconn 的模块,但是这个模块没有预编译包,我认为由于网站已经死了,所以它的维护时间更长了。我更喜欢可以包含在 Ubuntu 中作为正式依赖项的东西。
我不确定 apache 模块,但你可以使用 iptables。这是关于 connlimit 模块的操作方法:http ://www.cyberciti.biz/faq/iptables-connection-limits-howto/
在您的情况下,以下内容会起作用:
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)
但是,正如其他问题中提到的,要小心:此规则可能会阻止一些合法的机器人(如谷歌爬虫)或使用 NAT 并为大量用户共享单个 IP 地址的 ISP/组织。
小智 5
您可以使用 mod_qos httpd 模块。
QS_SrvMaxConnPerIP<number>[<connections>]
定义此服务器(虚拟主机)的每个源 IP 地址的最大连接数。“connections”参数定义了启用此限制的服务器(所有虚拟主机)的繁忙连接数,默认值为 0(这意味着即使服务器空闲,该限制也始终启用)。
更多详细信息请参见http://mod-qos.sourceforge.net。
例子:
LoadModule qos_module path_to_module/mod_qos.so
<IfModule mod_qos.c>
# max connection per IP is
QS_SrvMaxConnPerIP 15
</IfModule>
<VirtualHost *:80>
...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)