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

Apache ModSecurity配置:按资源每秒限制请求并跳转

搞定ModSecurity按资源限流并重定向的配置

嘿,我来帮你完善这个ModSecurity的配置,正好匹配你要的每秒每个.dimg资源最多10次请求、超额请求直接重定向的需求~

直接可用的完整配置

<LocationMatch "(.*)\.dimg(.*)">
    # 初始化资源专属的计数集合,用请求URI当唯一标识,每个.dimg资源单独计数
    SecAction phase:1,initcol:resource=%{REQUEST_URI},pass,nolog,id:132

    # 每次请求给当前资源的计数+1,同时设置1秒后计数重置——实现"每秒"的限流窗口
    SecAction phase:1,setvar:resource.COUNT=+1,expirevar:resource.COUNT=1,pass,nolog,id:133

    # 要是计数超过10,直接重定向到你指定的页面
    SecRule RESOURCE:COUNT "@gt 10" "phase:1,redirect:https://your-target-page.com,status:302,pass,nolog,id:134"

    # 调试用的日志级别,上线记得调低或者关掉
    SecDebugLogLevel 3
</LocationMatch>

给你拆解下关键部分

  • phase:1:把规则放在请求处理的最早期(请求头阶段),比你之前用的phase:2更高效,能更早处理限流逻辑
  • initcol:resource=%{REQUEST_URI}:给每个不同的.dimg资源单独建一个计数容器,比如/a.dimg和/b.dimg的计数是完全分开的,正好符合你“按资源”限流的要求
  • setvar+expirevar:每次请求给当前资源计数加1,同时告诉ModSecurity“1秒后把这个计数清零”,这样就刚好实现了“每秒最多10次”的限制
  • redirect指令:把https://your-target-page.com换成你实际要跳的页面就行,status:302是临时重定向,适合这种限流场景
  • pass,nolog:保证正常请求不受影响,也不会打一堆日志占空间,调试的时候可以改成log方便排查问题

几个要注意的点

  1. 你的ModSecurity版本得是2.8及以上,不然expirevar指令用不了
  2. 要是需要更精准的滑动窗口限流(比如不是整秒重置,而是滚动的1秒窗口),可以结合时间变量再调整,但你要的“每秒10次”用上面的配置完全够
  3. 调试的时候可以把SecDebugLogLevel改成9,上线记得调回3或者直接关掉,不然日志会爆
  4. 测试的时候可以用ab -n 20 -c 5 https://your-domain/test.dimg这种命令模拟并发请求,看看超过10次后是不是会跳转到指定页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:53:12