使用nginx限速,以这条规则为例:
limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;
这将设置每分钟 30 个请求。但是,如果我想堆叠第二条规则怎么办,所以逻辑是“每分钟 30 个请求,或每秒 1 个请求。以先到者为准”
这样做的原因是我们仍然想要 30/min 的上限,但是有一些奇怪的尝试,我们会在 1-2 秒的时间内看到 10x 请求的垃圾邮件。当请求通过这么快时,这会导致一些问题。因此,我们希望将用户限制为每秒 1 个请求,并且上限为每分钟 30 个。
我阅读了文档参考,但在堆叠不同的费率规则方面没有看到太多。
这可能吗?如果是这样,语法是什么?
将多个区域应用于同一块是完全有效的。您还可以创建多个区域来存储对相同密钥的请求(通常是客户端 IP 地址的某些前缀)。它只花费最少的处理和内存。
以下将限制用户,由他们的网络地址标识,以秒和分钟为间隔 - 并允许他们暂时超过定义的短期突发限制。您希望允许这样做,因为对于输入设备和/或网络访问不可靠的用户而言,这会使您的网站看起来不那么损坏 - 他们可能会两次发出相同的请求:
话虽如此,如果您的网络服务器无法处理短暂的搜索请求,那么您可能需要将搜索引擎卸载到其他机器或应用不同类型的速率限制。您需要在典型的人类使用和超出您的机器跟上能力的使用之间留出很大的余量。否则,您可能无法在恼人的合法用户和未能限制滥用/机器人使用之间找到一个安全的值。