首页 > 解决方案 > express-rate-limit 阻止来自所有用户的请求

问题描述

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

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

标签: node.jsamazon-web-servicesexpressrate-limitingratelimit

解决方案


默认情况下,有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
  }
}));

推荐阅读