javascript - Node js 速率限制

标签 javascript node.js api rate-limiting

我正在尝试使用 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/

相关文章:

api - 使用 REST API 保护 Laravel CSRF

python - 运行时错误 : module compiled against API version 0xa but this version of numpy is 0x9

javascript - 如何清空变量/将变量恢复为未定义?

Javascript - 如何从 Accordion 中获取值到表单中

javascript - Chrome 调试协议(protocol) : HeapProfiler. getHeapSnapshot 忽略回调

node.js - 使用 nodemailer 从 node.js 应用程序发送电子邮件

javascript - 多个提交按钮通过传递变量执行不同的操作

javascript - 这个 router.get ("/".......) 功能如何工作?

javascript - 了解 gruntjs registerTask 冒号

javascript - 如何判断 Google Street View Image API 是否返回 "Sorry, we have no imagery here"(is.NULL)结果?