2015-09-19 19 views
0

我正在使用nodejs和express来编写api,并且我的应用程序由openshift免费计划托管。 我想保护我的路线免受蛮力。例如,如果IP发送超过5个请求/秒,则将其阻止5分钟。 :)保护快递js服务器不受蛮力影响

+1

这被称为“速率限制”,并且已经有许多文章和一些关于它的先前的StackOverflow文章。我建议你从已经写好的东西开始。这里有一个:[什么是好的速率限制算法](http://stackoverflow.com/questions/667508/whats-a-good-rate-limiting-algorithm)。 – jfriend00

+0

@ jfriend00感谢您的名字,我正在寻找它+从头开始写点东西真的很酷:) –

+1

这里有一个关于[Leaky Bucket Algorithm]的好参考(https://en.wikipedia.org/wiki/ Leaky_bucket)这是用于速率限制的一种常用算法。 – jfriend00

回答

5

没有什么能够阻止你直接在Node.js/express中实现这个功能,但通常使用类似nginx或Apache httpd来处理到你的应用的流量(通常几乎肯定更容易)处理这类事情。

由于nginx(或其他)将绑定到端口80和443(需要管理员/超级用户/任何权限)而不是您的应用,因此您可以完全以非特权用户的身份运行应用。另外,您可以轻松获得其他一些理想的功能,例如缓存静态内容。

nginx的具有a module specifically for this

的ngx_http_limit_req_module模块(0.7.21)用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。

+0

感谢您的回复。但我认为我没有明白你的观点。我正在使用nodejs,并且不想使用其他网络服务器:) –

+5

将nginx用作节点的反向代理是标准做法。 –

+1

这是正确的答案。 –