【发布时间】:2021-07-15 07:13:38
【问题描述】:
我的 fastify 速率限制表现异常。 我想在 60 秒内允许 20 次点击,如果您的用户超过限制,那么他们应该再被阻止 60 秒。
这是我的代码 ->
要使用它,您需要执行“ npm install fastify-rate-limit ”
fastify.register(require('fastify-rate-limit'),
{
keyGenerator (req) {
let requestUrl = req.raw.url;
requestUrl = requestUrl.split('/');
let apiName = requestUrl[requestUrl.length - 1].replace('/','');
return req.raw.ip+apiName;
},
max: 20,
timeWindow: 1000*60,
addHeaders: {
'x-ratelimit-limit': true,
'x-ratelimit-remaining': true,
'x-ratelimit-reset': true,
'retry-after': true
},
});
我想要实现的场景->
用户 A 在 32 秒内请求 API 20 次,这意味着他现在已经用尽了他的命中配额(因为他只能在 60 秒内进行 20 次命中),如果现在他在剩余的 28 秒内再次请求,他应该在 60 秒内被阻止对该 API 发出请求。
【问题讨论】:
-
不像你描述的那样工作?
-
是的,它不起作用,正如我所描述的那样
-
我错过了你得到的行为:速率限制根本不适用,还是被阻止的请求时间不同?
-
不同的时间,我有一个 60 秒的时间窗口,在此之前它允许请求。我想要的是在允许的请求之后它应该阻塞 60 秒
-
@ManuelSpigolon 我在这里使用请求的 IP 地址作为密钥的一部分,但是如果 20 个系统连接到同一个 wifi 并且同时访问我的站点,那么它们都会在第一次请求后被阻止,因为它们都有相同的公共 IP 地址,那是集线器/路由器的地址,这是一个问题,你能建议一个更好的方法来唯一地识别这个网络中的系统,这样我就可以为每个系统提供一分钟内 20 次点击的速率限制,而不是一分钟内为整个网络提供 20 次点击的速率限制。?
标签: node.js rate-limiting fastify