在phpEnv这类集成环境中跑本地站点或内网演示时,很多人忽略了一个事实:Apache默认配置对单IP高频请求几乎没有防护。当遇到脚本小子用简单循环不停刷页面,或者搜索引擎被恶意镜像疯狂抓取,服务器很容易出现进程占满、响应变慢。Mod_Evasive作为Apache的第三方模块,能用极少资源完成基于IP的请求频率限制,非常适合挡住小规模DDOS或CC攻击。

一、phpEnv中确认Apache与模块可用性
phpEnv自带的Apache通常是Windows下的Apache Lounge编译版,部分版本已经包含了mod_evasive.dll,但默认没有启用。先打开phpEnv面板,进入对应的Apache目录,在modules文件夹中查找是否有mod_evasive.so(Linux)或mod_evasive.dll(Windows)。如果不存在,需要去Apache官方第三方模块页或对应系统编译包里获取同名文件放进去。
很多用户直接改配置却忘了放模块文件,导致Apache启动失败并提示“Cannot load modules/mod_evasive.dll”。所以第一步永远是确认文件就位。Windows下phpEnv一般把Apache装在软件目录的server/apache文件夹,modules子目录就是放.dll的地方。确认后,我们才能谈加载。
二、修改httpd.conf加载模块
打开phpEnv里Apache的conf/httpd.conf,在LoadModule区域末尾追加加载语句。Windows与Linux后缀不同,但指令名一致。加载后需声明模块配置块,否则模块虽加载却不会生效。
下面以Windows phpEnv为例,展示最小可用配置。注意路径反斜杠在Apache配置里要写成正斜杠或双反斜杠,避免解析错误。
# 加载模块(Windows环境)
LoadModule evasive_module modules/mod_evasive.dll
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 30
DOSEmailNotify admin@ipipp.com
</IfModule>
上面代码中,DOSPageCount表示同一页面在DOSPageInterval秒内被同一IP访问几次就封禁;DOSSiteCount是整站请求数阈值。DOSBlockingPeriod是封禁秒数。这些值是防御小规模攻击的起点,后续可按业务调整。
三、关键指令原理与调优
Mod_Evasive内部用一张哈希表记录IP与请求时间戳。每次请求到达,模块计算该IP在最近间隔内的命中数,超过阈值就返回403并写入封锁列表。DOSHashTableSize影响查找效率,站点IP多时可调大,如3097或更大质数。
如果业务本身有轮询接口,例如前端每2秒拉一次数据,那么DOSPageInterval设1、DOSPageCount设5就会误杀。此时应把页面级间隔调到2,计数调到10,或者把轮询域名走单独虚拟主机并关闭模块。下面是一段避免API被拦的虚拟主机配置示例:
<VirtualHost *:80>
ServerName api.ipipp.com
DocumentRoot "D:/www/api"
<IfModule mod_evasive20.c>
DOSPageCount 100
DOSSiteCount 200
DOSPageInterval 2
</IfModule>
</VirtualHost>
这种按虚拟主机覆盖参数的做法,比全局放宽更安全。真实防御中,我们常把静态资源、API、后台分开对待。后台严格,API宽松,静态走缓存,既挡攻击又不误伤正常用户。
四、日志与误拦排查
模块默认只在封禁时写错误日志。可在httpd.conf增加LogLevel alert或专门看error.log中“client denied by server configuration”类记录。若发现办公网整段被封,多是NAT出口单IP导致,此时应调高DOSSiteCount,或在前置Nginx做限流,Apache只做补充。
另一个常见坑是phpEnv以服务方式运行,改完配置要用面板“重启Apache”而不是点开exe。很多新手改了文件却没重启,以为模块无效。正确流程是保存配置、面板停止、启动,再看error.log有无模块加载成功行。
五、与小规模DDOS场景的匹配度
Mod_Evasive不是抗大流量方案,它消耗Apache自身资源,真遇上百兆以上攻击会先拖垮Web进程。但它的价值在于:在phpEnv本地、测试、小公司官网场景,用五分钟配置挡住九成脚本刷屏。配合Windows防火墙限制单IP连接数,能解决绝大多数“小规模DDOS”投诉。
总结来说,在phpEnv里启用Mod_Evasive就是放模块、改配置、分虚拟主机调阈值、看日志四步。它不能替代云端高防,但是开发期最省事的自我保护手段。
phpEnvApacheMod_Evasive修改时间:2026-08-10 15:36:41