我正在尝试使用 express-rate-limit 在我的应用程序上设置 API 速率限制.如果它来自相同的 IP 地址,它就可以工作。一旦达到最大值 5,我就会收到一条错误消息。但是,当从不同的 IP 地址/计算机尝试时,它会失败。知道我该如何解决这个问题吗?我尝试使用 127.0.0.1 生成一个 key ,而不管哪个 IP 地址,但也失败了。
下面是我的代码:
// Rate Limit
var RateLimit = require('express-rate-limit');
app.enable('trust proxy');
var limiter = new RateLimit({
windowMs: 365*24*60*60*1000, // 1 year
max: 5, // limit each IP to 1 requests per windowMs
delayMs: 365*24*60*60*1000, // delaying - 365 days until the max limit is reached
message: "Sorry, the maximum limit of 50 letters sent has been reached. Thank you for participating!",
keyGenerator: function (req) {
req.ip = "127.0.0.1";
// req.ip = "ip address";
return req.ip;
}
});
app.use('/api/letter', limiter);
最佳答案
express-rate-limit
使用的内存存储实现使用 setTimeout()
在 windowMs
毫秒后清除存储。
根据 Node.js documentation for setTimeout()
,
When delay is larger than 2147483647 or less than 1, the delay will be set to 1.
在您的情况下,延迟大于该数量,即 31536000000 毫秒。这导致存储从不存储任何数据超过 1 毫秒。
要解决这个问题,您可能必须实现自己的商店(请参阅 store
选项),或者寻找没有此限制的替代速率限制器(在我看来,过期时间这么长,无论如何你都需要某种持久存储)。
关于javascript - Node js 速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42468931/