我使用 Rack::Attack 的示例节流代码。
throttle('req/ip', limit: 100, period: 5.minutes) do |req|
req.ip unless req.path.starts_with?('/assets')
end
这在我们的暂存服务器上效果很好,但立即遇到了生产限制,因为 req.ip 返回的是负载均衡器的 IP 地址,而不是客户端的 remote_ip。
请注意,remote_ip 是 ActionDispatch::Request 中的一个方法,但不是 Rack::Attack::Request 中的一个方法。
我们在 Ruby 2.2 上使用 Rails 3.2.2。