11

我目前正在使用express-rate-limit模块来阻止来自ip节点服务器中相同或登录用户帐户的多个请求,这对DoS攻击非常有效。该服务器是一个小型本地企业,只需要一个实例,因为它没有太多的用户,并且它的计算需求不是太密集。

我最近一直在阅读很多关于它的内容nginx,很多人建议在节点服务器中使用它,但我看不出在这种应用程序中使用它的主要优势。

如何nginx更好地为我的应用程序?npm modules就单个服务器应用程序的安全性而言,它可以做什么其他人无法做到的?

4

1 回答 1

9

好吧,我不是 NGINX 专家,但我目前在我的 EC2 实例上在生产中使用 NGINX。当谈到速率限制时,有几个选项可用于表达

  • 您可以将 redis 用作存储,获取每个传入请求的 IP 地址,并在决定为它们提供服务之前检查它们当前有多少命中。这可能是适用于所有路由的中间件
  • 您可以使用express-rate-limitrate-limiter-flexible之类的库来为您处理 redis 部分
  • 现在,当您使用 NGINX 时,它是一个 Web 服务器,其优势在于准确地说不是速率限制。如果您修改配置,它仍然支持速率限制。这里是对 NGINX 速率限制的见解。
  • 您还没有考虑过的另一个选项称为 HAProxy,它是一种负载均衡器,被认为对于诸如速率限制之类的任务非常出色。你可以在这里阅读

让我们谈谈你问题的第二部分

  1. 应用程序内部的速率限制是一个坏主意。它不属于这样的应用程序。它不是业务逻辑的一部分。此外,除非您调整它以支持集群,否则它不适用于集群模式(多个核心同时运行 express)。
  2. 使用 NGINX 配置的速率限制只需要 2 行额外的行,如我之前发布的链接所示。如果你突然想添加一条额外的路由或免除某些路由的速率限制,NGINX 可以很容易地做到这一点。
  3. 如果您想免除您的云端地址或 CDN 服务器地址的速率限制,您可以将 IP 白名单添加到 NGINX conf 以便免除它们。在应用程序中执行此操作将是一个真正的痛苦,因为您将不得不 git commit、重新部署等。这个答案涵盖了如何免除地址
于 2019-08-15T11:01:59.793 回答