2

我正在使用express-rate-limitnpm 包,我在 AWS(t2 micro ec2 实例)上部署了我的后端,当限制器打开时,请求被阻止ALL users尝试与我的 API 交互的人,它工作了几分钟并停止了大约 10 分钟. 当我注释掉限制器部分时,一切正常,我认为只有一个用户试图用请求锤击服务器,但发生的情况是ALL users get blocked,所有用户都被视为只有 1 个用户,这就是我的结论。

如果是这种情况,我该怎么办?我需要我的限速器,如果有任何其他解释会是什么?

4

3 回答 3

3

默认情况下,有express-rate-limit一个keyGeneratorreq.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
  }
}));
于 2021-05-21T03:31:27.570 回答
0

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

于 2020-12-15T12:24:40.473 回答
0
keyGenerator: function (req: any) {
    return req.headers["x-forwarded-for"] || req.connection.remoteAddress; 
}

它基于 iP 阻止

于 2022-02-25T20:27:29.183 回答