节点服务器中的Express-rate-limit与NGINX

Fel*_*ali 5 nginx rate-limiting ratelimit node.js express

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

nginx最近,我读了很多书,很多人建议在节点服务器中使用它,但是我看不到在这种应用程序中使用它的主要优点。

怎么会nginx是我的应用程序更好?就npm modules单个服务器应用程序的安全性而言,其他功能无法做到?

Pir*_*App 8

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

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

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

  1. 应用程序内部的速率限制是一个坏主意。它不属于应用程序本身。它不是业务逻辑的一部分。此外,它不适用于集群模式(多个内核同时运行 express),除非您对其进行调整以支持集群。
  2. 使用 NGINX 配置的速率限制只需要 2 行额外的行,如我之前发布的链接所示。如果您突然想添加额外的路由或免除某些路由的速率限制,NGINX 可以轻松做到这一点。
  3. 如果您想免除 Cloudfront 地址或 CDN 服务器地址的速率限制,您可以将 IP 白名单添加到 NGINX conf,以便它可以免除它们。在应用程序中执行此操作将是一个真正的痛苦,因为您必须进行 git 提交、重新部署等。答案涵盖了如何免除地址