Apache服务器中大量Connection to Child连接是否会拖慢服务器?
问题描述
我在Apache服务器上运行一个简单的Web应用,未修改代码或配置的情况下,所有请求约30秒后均返回500 Error。同时发现SSH和SFTP连接服务器时异常缓慢,但登录后操作恢复正常。我已通过top和htop检查CPU与内存使用情况,结果均正常。此外,Apache的error.log文件中出现数千条来自同一未知IP的如下日志:
[ssl:info] [pid ] [client xxx.xx.xxx.xxx:xxxxxx] AH0: Connection to child n established
我尝试重启Apache服务器,但问题未解决。请问此类连接是否会拖慢服务器?
解答
这类连接绝对会拖慢服务器,本质是典型的连接耗尽攻击,具体原因和解决思路如下:
核心原因
Apache依赖子进程处理客户端连接,当单个IP持续建立大量SSL连接却不完成完整请求交互时:
- Apache可用子进程会被快速耗尽,合法请求无法获取处理进程,最终超时返回500错误。
- 服务器TCP连接数达到上限,SSH/SFTP这类依赖新TCP连接的服务在握手阶段被阻塞,表现为连接缓慢;但登录后已有连接不受影响。
top/htop仅监控CPU和内存,无法直接体现网络连接资源(文件句柄、TCP端口)被占满的情况,这才是问题根源。
验证方法
用以下命令确认连接耗尽状态:
- 查看该IP的活跃连接数:
netstat -ntu | grep xxx.xx.xxx.xxx | wc -l - 检查Apache子进程数是否触达配置上限(由
MaxRequestWorkers控制):ps aux | grep apache2 | wc -l
紧急解决步骤
- 临时封禁恶意IP:
iptables环境:
firewalld环境:iptables -A INPUT -s xxx.xx.xxx.xxx -j DROPfirewall-cmd --add-rich-rule='rule family="ipv4" source address="xxx.xx.xxx.xxx" reject' --permanent firewall-cmd --reload - 调整Apache连接参数:
在Apache配置文件中添加/修改以下规则,重启服务生效:Timeout 30 KeepAliveTimeout 5 MaxKeepAliveRequests 100 - 长期防护:
- 启用Apache的
mod_evasive或mod_security模块,配置IP访问频率限制。 - 用防火墙限制单IP并发连接数:
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j REJECT
- 启用Apache的
内容的提问来源于stack exchange,提问作者LucBed
相关产品推荐
相关产品推荐

