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

Apache mod_evasive在Drupal虚拟主机特定页面不遵循配置问题

解决Drupal 9 PHP状态页面触发mod_evasive 403的问题

问题分析

你在虚拟主机配置的mod_evasive规则对大部分页面生效,但/admin/reports/status/php每次刷新都返回403,说明这个页面的请求触发了mod_evasive的默认阈值,而非你自定义的规则。大概率是该页面的请求处理被Apache的其他配置段覆盖,或者页面本身的加载行为导致请求计数异常。

解决方案

1. 针对PHP状态页面单独配置mod_evasive

在你的虚拟主机配置文件中,添加针对该页面的<Location>块,强制应用自定义规则:

<Location "/admin/reports/status/php">
    <IfModule mod_evasive20.c>
        DOSSiteCount 50
        DOSSiteInterval 1
        DOSPageCount 10
        DOSPageInterval 1
        DOSBlockingPeriod 120
    </IfModule>
</Location>

添加后重启Apache服务,测试页面是否正常访问。

2. 检查冲突的配置段

查看Apache的全局配置或Drupal根目录的.htaccess文件,确认是否存在针对/admin路径的单独<Directory>或<Location>配置——这类配置可能重置了mod_evasive的参数。如果有,修改这些配置段使其继承虚拟主机的mod_evasive规则,或者直接删除冲突的重置项。

3. 启用mod_evasive日志排查原因

如果上面的方法无效,开启mod_evasive的日志功能,明确触发403的具体原因:
在虚拟主机的mod_evasive配置块中添加日志目录配置:

<IfModule mod_evasive20.c>
    DOSSiteCount 50
    DOSSiteInterval 1
    DOSPageCount 10
    DOSPageInterval 1
    DOSBlockingPeriod 120
    DOSLogDir "/var/log/apache2/mod_evasive"
</IfModule>

确保日志目录存在且Apache有写入权限,重启服务后访问PHP状态页面,查看日志文件就能知道是DOSPageCount还是DOSSiteCount触发了拦截,再针对性调整参数。

4. 临时放宽该页面的规则(可选)

如果日志显示页面的请求计数确实超标,可以临时给这个页面设置更宽松的参数:

<Location "/admin/reports/status/php">
    <IfModule mod_evasive20.c>
        DOSPageCount 20
        DOSPageInterval 2
    </IfModule>
</Location>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:25:56