node.js - express-rate-limit 阻止来自所有用户的请求
问题描述
我正在使用express-rate-limit
npm 包,我在 AWS(t2 micro ec2 实例)上部署了我的后端,当限制器打开时,请求被阻止ALL users
尝试与我的 API 交互的人,它工作了几分钟并停止了大约 10 分钟. 当我注释掉限制器部分时,一切正常,我认为只有一个用户试图用请求锤击服务器,但发生的情况是ALL users get blocked
,所有用户都被视为只有 1 个用户,这就是我的结论。
如果是这种情况,我该怎么办?我需要我的限速器,如果有任何其他解释会是什么?
解决方案
默认情况下,有express-rate-limit
一个keyGenerator
。req.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
}
}));
推荐阅读
- discord - 如何通过用户 ID 赋予用户角色?我想在命令中输入用户 ID(参数)
- python - Python,忽略ANSI颜色命令的打印函数
- python-3.x - 我在读取 csv 文件并将单词插入 pyqt 的文本框中时遇到问题。单词没有像应有的那样打印到文本框中
- gitlab-ci - gitalb CI:x509:访问私有 docker 注册表时由未知权威签署的证书
- spring-cloud-dataflow - 为什么没有出现 Spring Cloud Dataflow 供应商属性?
- ruby-on-rails - LoadError:库版本不兼容
- java - Eclipse IDE 调试 servlet 代码一个变量未在“变量”选项卡中注册
- google-cloud-functions - Google Cloud Create Function 因 docker_layer_cache 上的缓存未命中而失败
- r - Shiny.io 无法部署应用程序
- c# - 当用户使用javascript单击单元格时如何显示数据?