Ruby on rails 如何使Rack::Attack在负载平衡器后面工作?
我使用了Rack::Attack的示例节流代码Ruby on rails 如何使Rack::Attack在负载平衡器后面工作?,ruby-on-rails,rackattack,Ruby On Rails,Rackattack,我使用了Rack::Attack的示例节流代码 throttle('req/ip',限制:100,周期:5分钟)do|req| req.ip,除非req.path.以“(“/assets”)开头 终止 这在我们的登台服务器上非常有效,但立即在生产上遇到了限制,因为req.ip返回负载平衡器的ip地址,而不是客户端的远程ip 请注意,远程ip是ActionDispatch::Request中的一种方法,而不是Rack::Attack::Request 我们正在Ruby 2.2上使用Rails 3
throttle('req/ip',限制:100,周期:5分钟)do|req|
req.ip,除非req.path.以“(“/assets”)开头
终止
这在我们的登台服务器上非常有效,但立即在生产上遇到了限制,因为req.ip返回负载平衡器的ip地址,而不是客户端的远程ip
请注意,远程ip是ActionDispatch::Request中的一种方法,而不是Rack::Attack::Request
我们正在Ruby 2.2上使用Rails 3.2.2。我通过在Rack::Attack::Request中添加一个方法,使其正常工作
class框架::攻击
类请求<::机架::请求
def远程_ip
@远程ip | |=(env['action_dispatch.remote_ip']| ip)。发送至
终止
终止
终止
然后使用
req.remote_ip unless req.path.starts_with?('/assets')
为什么不将路径/资产列为白名单?这解决了特定情况下的问题,但并不能解决每个请求都具有相同客户端IP地址的更一般问题。