6

我有兴趣使用https://github.com/kickstarter/rack-attack来扼杀滥用者和暴力攻击者。我的应用程序在多个 dyno 上运行,所以我认为 Rails 默认 FileStore 并不完全有效,因为每个 dyno 都有一个文件系统,并且节流需要是两者的总和。

如果我要使用 memcached 插件服务Rails.cache,如果 memcached 服务出现故障(例如,对 FileStore 来说),Rails 中是否有内置的“回退”?

如果没有,随着 memcached 服务的中断,rails 应用程序是否会崩溃或用户无法访问(与优雅地处理错误相比)?

4

1 回答 1

13

我是机架攻击的作者。

tl;dr:当您的缓存后端(memcached 或 redis)关闭时,所有请求都被允许(即故障打开)。

这实际上取决于 Rails 缓存的作用。Dalli memcached 客户端 ( ActiveSupport::Cache::DalliStore ) 和 Redis 客户端 ( ActiveSupport::Cache::RedisStore ) 都可以挽救连接错误和超时返回nil

当 rack-attack 向缓存存储查询限制值时,缓存存储返回nil. 机架攻击施法即to_i0。并且由于您的油门限制 > 0,因此允许该请求。

机架攻击在每次提交测试时运行集成测试,不会引发错误,并且当 memcached/redis 不可用时允许请求。

于 2015-02-02T18:14:10.980 回答