我在 Ubuntu 上运行 Apache Web 服务器。我试图减少由于机器人流量过大而导致的服务器负载。因此,我尝试使用 Apache 的 mod QOS (http://mod-qos.sourceforge.net/index.html) 为激进用户创建速率限制器。
我已经用这个配置它了:
<IfModule mod_qos.c>
SetEnvIf Request_URI ^/ LimitHits
QS_ClientEventLimitCount 100 100 LimitHits
QS_ErrorResponseCode 429
</IfModule>
如果用户在 100 秒内发出的请求超过 100 个,则会阻止该用户。
但问题是,由于某些未知原因,这种配置会阻止全部当任何用户越过阈值时,用户。
这很奇怪,因为文档中显示这个特定变量与请求者的 IP 绑定,这正是我想要做的。
QS_ClientEventLimitCount:定义在定义的时间内(默认为 600 秒)允许的最大请求数,其中设置了定义的环境变量(默认为 QS_Limit)。来自达到此限制的客户端 IP 的请求将在指定时间内被拒绝(在请求级别被阻止)。
访问日志确实显示了每个请求的客户端 IP,所以我知道这些 IP 正在传输到 Apache。
我如何获取变量QS_客户端事件限制计数按照预期运行并且只计算请求数并根据每个 IP 进行阻止?