Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使Rack::Attack在负载平衡器后面工作?_Ruby On Rails_Rackattack - Fatal编程技术网

Ruby on rails 如何使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

我使用了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.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地址的更一般问题。