如何/应该在给定的时间内限制HTTP请求的数量?

时间:2013-08-06 19:49:51

标签: ruby-on-rails ruby http request limit

为了避免不受欢迎的数据存储,我想限制我的服务器在给定时间段内接受的HTTP请求数量,例如每十秒钟最多一次。实际上,如果每个时段的HTTP请求太多,我想让我的控制器操作响应错误消息。我该怎么做?它应该在中间件中处理吗?


更新

我正在寻找一种方法来使控制器操作为传入的HTTP请求运行。然后,在控制器动作代码中,我想检查最近10秒内是否已经访问过最后一个资源对象(通过HTTP请求),我想让比较最后一个HTTP的时间请求已使用“日志时间”执行,该“日志时间”存储在该资源对象的数据库中

“log-time”是与提到的资源对象(Ruby on Rails ActiveModel对象)相关的属性,它用于存储访问该对象的最后时间(通过HTTP请求)。因此,如果对于该资源对象每个周期执行了太多的HTTP请求,那么我想生成错误。

1 个答案:

答案 0 :(得分:2)

这可能由Nginx或Apache更好地处理。并非每个HTTP请求都通过您的Rails应用程序。例如,静态资产的请求通常由Nginx / Apache直接处理。此外,在扩展应用程序时,最终可能在同一个nginx服务器后面有多个Rails进程。

对于nginx,HttpLimitReqModule可能就是您所需要的。超过限制时,服务器将以503 Service Temporarily Unavailable响应。可以为此状态代码创建custom error page

对于apache,有mod_ratelimitmod_evasive

(这可能是显而易见的,但是在nginx / apache中处理速率限制的另一个好处是超出限制的请求甚至不会进入你的Rails进程.Nginx / Apache会立即切断它们,可能会节省一些CPU 。)

相关问题