emm*_*dee 5 networking nginx rate-limiting
使用nginx限速,以这条规则为例:
limit_req_zone $request_limiting_zone_key zone=request_limiting_search:20m rate=30r/m;
这将设置每分钟 30 个请求。但是,如果我想堆叠第二条规则,那么逻辑是“每分钟 30 个请求,或每秒 1 个请求。以先到者为准”
原因是我们仍然希望上限为 30/分钟,但有一些奇怪的尝试,我们在 1-2 秒内看到了 10 次请求的垃圾邮件。当请求通过得那么快时,这会导致一些问题。因此,我们希望将用户限制为每秒 1 个请求,并且每分钟上限为 30 个。
我阅读了文档参考,但没有看到太多有关堆叠不同费率规则的信息。
这可能吗?如果是这样,语法是什么?
将多个区域应用到同一个块是完全有效的。您还可以创建多个区域来存储对同一密钥(通常是客户端 IP 地址的某些前缀)的请求。它只花费最少的处理和内存。
以下内容将以秒和分钟的间隔限制由网络地址标识的用户,并允许他们暂时超出定义的短突发限制。您希望允许这样做,因为这将使您的网站对于输入设备和/或网络访问不可靠的用户来说显得不那么损坏 - 他们可能会两次发出相同的请求:
map $remote_addr $request_limiting_zone_key {
# [..]
}
limit_req_zone $request_limiting_zone_key zone=request_limit_search_second:10m rate=1r/s;
limit_req_zone $request_limiting_zone_key zone=request_limit_search_minute:10m rate=30r/m;
# [..]
location /search {
limit_req zone=request_limit_search_second burst=3;
limit_req zone=request_limit_search_minute burst=3;
}
Run Code Online (Sandbox Code Playgroud)
话虽这么说,如果您的网络服务器无法处理短时间的搜索请求,也许您需要将搜索引擎卸载到其他计算机或应用不同类型的速率限制。您需要在典型的人类使用情况和超出机器跟上能力的使用情况之间留出很大的余量。否则,您可能无法在烦人的合法用户和无法限制滥用/机器人的使用之间找到安全的价值。
| 归档时间: |
|
| 查看次数: |
4796 次 |
| 最近记录: |