2010-03-07 115 views
10

尝试谷歌周围的Rails插件,这将允许限制特定资源消耗的请求量。 Django的Piston有一些开源的代码。有没有可用的Rails开箱即用,或者可以肯定地认为,看看Piston如何做,并将它作为Rails插件移植是可以使用的东西?限制对Ruby on Rails API的请求

回答

1

有一个SO thread here为什么你可能要进行速率限制在应用程序外部至少,思考的食物。我正在自己寻找这个解决方案,并且无论我是否想在应用程序层中完成这项工作。

2

Rack::Defense是一个用于请求限制和过滤的机架中间件。它设置简单,占地面积小,只有两个依赖项(机架和redis)。您可以过滤在几乎任何条件:IP,API令牌,用户名等

这里是你如何将油门路径/login POST请求,每个IP每分钟20请求的最大速率的例子:

Rack::Defense.setup do |config| 
    config.throttle('login', 20, 60 * 1000) do |req| 
    req.ip if req.path == '/login' && req.post? 
    end 
end 

如何油门路径/api/* GET请求,每个API令牌每秒50个请求的最大速率又如:

Rack::Defense.setup do |config| 
    config.throttle('api', 50, 1000) do |req| 
    req.env['HTTP_AUTHORIZATION'] if %r{^/api/} =~ req.path 
    end 
end 

disclamer:我机架::国防gem维护者。