You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅为单个Apache2虚拟主机启用Mod_Evasive?

解决Mod_Evasive仅针对单个Apache虚拟主机生效的问题

我完全懂你这个困扰——Mod_Evasive确实是全局加载的模块,官方文档里确实没提供直接按虚拟主机启用/禁用的开关,不过你提到的「默认参数拉满+特定站点单独配置」的思路是可行的,而且是目前社区里最常用的解决方案,我来给你拆解具体操作步骤:

第一步:全局配置“禁用”Mod_Evasive的拦截效果

先在Mod_Evasive的全局配置文件(通常是/etc/apache2/mods-available/mod_evasive.conf,或者直接写在Apache主配置httpd.conf/apache2.conf里),把所有触发阈值设到极高值,让默认情况下完全不会触发拦截或封禁:

# 全局默认配置:将阈值拉到正常访问不可能达到的数值,等同于全局“禁用”防护
DOSHashTableSize 3097
DOSPageCount 10000    # 单页面1秒内请求数阈值,设10000基本不会触发
DOSSiteCount 100000   # 整个站点1秒内请求数阈值
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 0   # 封禁时长设0,即使触发也不会封禁

这样配置后,所有虚拟主机默认都不会受到Mod_Evasive的拦截影响。

第二步:在目标虚拟主机中覆盖参数,启用防护

找到你需要启用Mod_Evasive的虚拟主机配置块(比如/etc/apache2/sites-available/your-domain.conf),在里面添加Mod_Evasive的专属配置,覆盖全局的极高阈值:

<VirtualHost *:80>
    ServerName your-target-domain.com
    DocumentRoot /var/www/your-target-domain
    # 其他虚拟主机常规配置(比如日志、SSL设置等)...

    # 针对该站点启用Mod_Evasive防护,设置正常的防护阈值
    DOSPageCount 20       # 1秒内单页面请求超过20次触发拦截
    DOSSiteCount 100      # 1秒内整个站点请求超过100次触发拦截
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 600 # 触发后封禁10分钟(600秒)
    DOSLogDir "/var/log/apache2/mod_evasive" # 日志目录,需确保Apache有读写权限
    DOSEmailNotify "admin@your-target-domain.com" # 触发拦截时发送通知邮件
</VirtualHost>

如果你的站点启用了HTTPS,记得在对应的<VirtualHost *:443>块里也添加同样的Mod_Evasive配置,不然HTTPS请求不会被防护。

关键注意事项

  • 确保DOSLogDir指定的目录存在,并且Apache进程拥有读写权限,否则Mod_Evasive可能会抛出错误导致站点无法正常运行,可以用命令创建并授权:mkdir -p /var/log/apache2/mod_evasive && chown www-data:www-data /var/log/apache2/mod_evasive
  • 测试防护效果可以用Apache自带的ab命令模拟高频请求:ab -n 30 -c 10 http://your-target-domain.com/,此时目标站点应该会返回403被封禁,而访问其他虚拟主机的相同请求则不受影响
  • 如果你有多个需要防护的虚拟主机,只需要在对应的每个虚拟主机配置块里重复上述参数配置即可

为什么没有更直接的方法?

Mod_Evasive的设计本身就是全局模块,它没有提供类似EnableModEvasive On/Off的虚拟主机级开关,所以通过参数覆盖的方式是目前最稳妥的实现方案,也是社区里广泛采用的做法。

内容的提问来源于stack exchange,提问作者karnehe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:01:15