微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自所有用户的明示速率限制阻止请求

如何解决来自所有用户的明示速率限制阻止请求

我正在使用express-rate-limit npm软件包,将后端部署在AWS(t2 micro ec2实例)上,同时启用了限制器,阻止了ALL users尝试与我的API进行交互的请求,它可以工作几分钟,然后停止约10分钟。 当我注释掉限制器部分时,一切正常,我认为对于只有一个试图用请求锤击服务器的用户,应该阻止太多请求,但是发生的情况是ALL users get blocked,所有用户都被视为仅一个用户,这就是我的结论。

如果是这种情况,我该怎么办?,我需要开启我的限速器,并且如果还有其他解释,那会是什么?

解决方法

默认情况下,express-rate-limitkeyGeneratorreq.ip。当我在我的服务器上记录它时,它是 '::ffff:127.0.0.1',这显然对于每个请求都是相同的,因此一旦限制为一个,就会限制所有 IP 地址。

我的解决方案是使用 request-ip 来获取正确的 IP 地址,如下所示:

const rateLimit = require('express-rate-limit');
const requestIp = require('request-ip');

const app = express();

app.use(requestIp.mw());

app.use(rateLimit({
  windowMs: 60 * 1000,// 1 minute
  max: 30,// limit each IP to 30 requests per windowMs
  keyGenerator: (req,res) => {
    return req.clientIp // IP address from requestIp.mw(),as opposed to req.ip
  }
}));
,

express-rate-limit软件包根据IP地址阻止请求,这是因为它为速率限制提供了非常基本的配置,适用于大多数应用程序。如果您基于用户进行阻止,则有人可以轻松地配置漫游器以攻击您的API,直到达到一个用户帐户的限制,然后自动创建一个新帐户以再次开始攻击您的服务器。基于IP的阻塞避免了这样的风险,因为无论有多少用户从该IP请求,一个IP都意味着一个设备。在大多数情况下,一个人最有可能使用一台设备,因此此解决方案效果很好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。