在 Debian 下使用 Apache2 限制连接数,通常从 MPM 模块配置、mod_reqtimeout、mod_evasive 以及 防火墙/限流 几个层面来做。下面按“最常用 → 更严格”的方式说明。
Debian 默认可能是 prefork、worker 或 event。
apache2ctl -V | grep -i mpm
常见文件位置:
/etc/apache2/mods-available/mpm_prefork.conf/etc/apache2/mods-available/mpm_event.conf/etc/apache2/mods-available/mpm_worker.confsudo nano /etc/apache2/mods-available/mpm_prefork.conf
示例:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150 # 最大并发连接数
MaxConnectionsPerChild 1000
</IfModule>
修改后:
sudo systemctl restart apache2
✅ MaxRequestWorkers = 同时能处理的请求数
sudo nano /etc/apache2/mods-available/mpm_event.conf
示例:
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
配置:
sudo nano /etc/apache2/mods-available/evasive.conf
示例:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60
</IfModule>
重启:
sudo systemctl restart apache2
✅ 可防单 IP 高频请求
sudo a2enmod reqtimeout
配置文件:
/etc/apache2/mods-available/reqtimeout.conf
示例:
RequestReadTimeout header=10-20,minrate=500
RequestReadTimeout body=10,minrate=500
iptables -A INPUT -p tcp --dport 80 -m connlimit \
--connlimit-above 20 -j DROP
或 HTTPS:
iptables -A INPUT -p tcp --dport 443 -m connlimit \
--connlimit-above 20 -j DROP
如果你前面有 Nginx:
limit_conn_zone $binary_remote_addr zone=perip:10m;
server {
limit_conn perip 10;
}
| 需求 | 推荐方式 |
|---|---|
| 限制总并发 | MPM MaxRequestWorkers |
| 防单 IP 刷 | mod_evasive |
| 防慢连接 | mod_reqtimeout |
| 系统级硬限 | iptables connlimit |
如果你愿意,可以告诉我:
我可以给你一份精确配置。