节流器阻止其他IP

问题描述 投票:0回答:1

我有一个nestjs应用程序,它使用throttler来限制应用程序在返回429之前可以接收的请求数量。

正如文档中所述,它通过 IP 进行阻止:npmjs.com/package/@nestjs/throttler

但是,我使用 heroku.loader 插件来模拟许多用户访问端点。

我的测试是每秒生成 100 个连接,持续 30 秒,同时我将通过浏览器访问我的 api。

问题是,在我的浏览器中,我收到了来自节流器的 429,即使我只发出了 1 个请求。节流器屏蔽其他IP正常吗?我检查了日志,加载程序创建的每个假用户的 IP 都有不同的 IP。不应该阻止我的

node.js nestjs throttling
1个回答
0
投票

我不确定这是最好的解决方案,但是,您可以通过 req.header.fingerprint 您的客户端应随每个请求标头随机发送(实现:当用户访问前端站点时,应生成并保存指纹到 cookie 或 localStorage(如果 cookie 中有的话)。如果有更好的解决方案请告诉我:)

// throttler-behind-proxy.guard.ts
@Injectable()
export class ThrottlerBehindProxyGuard extends ThrottlerGuard {
  protected async getTracker(req: Record<string, any>): Promise<string> {
    const ip = req.ips.length ? req.ips[0] : req.ip;
    const fingerprint = req?.headers?.fingerprint;
    return ip + fingerprint;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.