一些机器人(例如 claudebot)通过以每秒高请求率索引内容来减慢我们的服务器速度。
我不想禁止它们。我正在寻找一种方法来减慢 Apache 的速度。
我尝试像这样使用 ratelimit:
<If "%{HTTP_USER_AGENT} =~ /claudebot/">
<Limit GET POST>
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 10
SetEnv rate-limit-burst 5
SetEnv rate-limit-delay 500
</Limit>
</If>
但它似乎效率不高。
我找到了使用 libapache2-mod-evasive 的方法,可以防止 DOS 攻击,并且如果速率较高则可以阻止 IP。
是否可以为指定的用户代理激活 mod-evasive?
最佳答案
1
影响您的不是索引部分,而是抓取部分。我相信 mod_ratelimit 限制的是带宽而不是资源使用量 – 通过人为地限制流量,您会使每个请求的时间更长,从而加剧对服务器的影响。
如果是我,并且假设这里的目标是仍然允许抓取但仅限制速率,我会使用 fail2ban 来检测高机器人流量,并使用某种机制切换到在超出阈值时以 429 响应的 HTTP 端点。
(例如,某些机制可能是将 iptables 重定向到在不同端口上运行的 vhost,或者将 .htaccess 文件定义为一组 iP 地址的行为)。
|
|