Apache2中如何限制访问频率
在Apache2服务器中,利用mod_evasive模块有效限制访问频率,防止DDoS攻击。安装后配置DOSHashTableSize(哈希表大小)、DOSPageCount(页面请求计数)等参数,设定同一IP在指定时间内的页面和站点请求上限,一旦超出则自动将其拉黑一段时间,从而实现自动防护。
在Apache2里限制访问频率,其实是个挺常见的需求。尤其是当你发现网站流量突然异常,或者后台日志里频繁出现某个IP的疯狂请求时,你肯定想过:能不能直接给这些“捣乱分子”设个门槛?

答案是肯定的。Apache2里有一个很成熟的防攻击模块——mod_evasive,专门用来干这个。它的核心逻辑很简单:记录每个IP的访问行为,一旦触发了你设定的阈值,就自动拉黑一段时间。下面我们就直接上手,看看怎么装、怎么配、怎么用。
安装mod_evasive
不同发行版的安装方式大同小异。以Debian/Ubuntu为例,一行命令搞定:
sudo apt-get update
sudo apt-get install libapache2-mod-evasive如果是CentOS/RHEL系列,用yum或dnf装对应的包就行。装完之后,别忘了启用模块:
sudo a2enmod evasive配置文件的路径,不同系统略有差异。Debian/Ubuntu通常是在/etc/apache2/apache2.conf或/etc/apache2/mods-enabled/evasive.conf里;CentOS/RHEL则一般在/etc/httpd/conf/httpd.conf。找到配置文件后,把下面这段内容加进去:
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
这几个参数,每个都有它的用途。简单解释一下:
- DOSHashTableSize:哈希表大小,用来存储IP和访问记录。数值越大,能处理的并发请求越多,但内存消耗也会相应增加。3097是一个比较稳妥的起步值。
- DOSPageCount:在
DOSPageInterval秒内,同一个IP可以请求同一个页面的最大次数。超过这个数,就会被暂时“请出”。 - DOSSiteCount:在
DOSSiteInterval秒内,同一个IP可以请求整个站点的最大次数。这个参数主要防止单IP对整个站点的全局扫描。 - DOSPageInterval:页面请求统计的时间窗口,单位是秒。
- DOSSiteInterval:站点请求统计的时间窗口,单位是秒。
- DOSBlockingPeriod:拉黑时长,单位是秒。被限制的IP在这段时间内无法访问你的站点。
上面的配置,通俗点理解就是:同一个IP在1秒内请求同一个页面超过2次,或者1秒内请求整个站点超过50次,就会被拉黑10秒。当然,这些数值只是参考,实际生产环境中,你需要根据自己网站的流量特征来调整。比如,如果是高并发接口,DOSPageCount可以适当调高,但别放得太松,不然就失去防护意义了。
配置完成后,重启Apache使之生效:
sudo systemctl restart apache2到此为止,mod_evasive就已经开始工作了。它会默默地记录每个IP的访问频次,一旦触雷,立刻拦截。整个过程不需要额外的人工干预,相当于给你的网站加了一层自动防护网。


































