Apache不支持直接对DELETE/PUT限频,但可通过“白名单放行+环境标记+mod_evasive触发限流”组合实现:先用LimitExcept禁用非必要方法,再对指定API路径的PUT/DELETE设置DOS_ENABLED环境变量,最后由mod_evasive按IP+路径+方法精准限流。

Apache 本身不直接支持对 DELETE/PUT 等特定方法做“动态频率限流”(如每秒最多 5 次 PUT),但可通过组合策略实现严格准入控制:先禁止非法调用,再对确需开放的场景施加精准防护。核心思路是「白名单放行 + 环境标记 + mod_evasive 触发限流」,而非依赖过时的 <Limit> 或无效的 LimitExcept 单独限频。
一、彻底禁用非必要方法(默认安全基线)
在主配置或虚拟主机中明确拒绝危险方法,避免被绕过:
- 使用
<LimitExcept GET POST HEAD OPTIONS>包裹整个站点目录,确保仅允许基础安全方法 - 若必须保留某些接口支持 PUT/DELETE,不要全局放开,而是在具体
<Location /api/>下单独启用,并配合身份校验(如 Basic Auth 或 Token 验证) - 注意:
<Limit>在 Apache 2.4+ 已废弃,LimitExcept是当前标准写法;错误语法会导致 httpd 启动失败
二、对确需开放的 PUT/DELETE 接口做环境标记
仅当请求路径和方法匹配时,才设置触发限流的环境变量:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在
httpd.conf或站点配置中添加:
<If "%{REQUEST_METHOD} == 'PUT' || %{REQUEST_METHOD} == 'DELETE'">
SetEnvIf Request_URI "^/api/v1/upload" DOS_ENABLED
SetEnvIf Request_URI "^/api/v1/resource/\d+$" DOS_ENABLED
</If> - 这样只有指定路径下的 PUT/DELETE 请求才会被
mod_evasive捕获,不影响其他正常流量
三、用 mod_evasive 实现方法级精准限流
mod_evasive 是 Apache 生态中唯一能按请求方法+路径维度生效的限流模块:
- 启用模块:
LoadModule evasive20_module modules/mod_evasive20.so - 关键配置示例:
DOSPageCount 3
DOSPageInterval 10
DOSSiteCount 50
DOSSiteInterval 60
DOSBlockingPeriod 600
DOSLogDir "/var/log/apache2/evasive"
# 只对标记了 DOS_ENABLED 的请求生效
DOSWhitelist 127.0.0.1
DOSWhitelist 192.168.1.* - 效果:同一 IP 在 10 秒内对
/api/v1/upload发起超过 3 次 PUT,即被封禁 600 秒
四、补充防御:限制请求体大小与超时
防止恶意大体积 PUT 请求耗尽资源:
- 对 PUT/DELETE 接口所在位置增加:
<LocationMatch "^/api/.*$">
LimitRequestBody 10485760 # 限制最大 10MB
Timeout 30 # 超时设为 30 秒,避免长连接占位
</LocationMatch> - 搭配
mod_security可进一步校验 Content-Type、签名头等业务级字段,提升准入门槛

















