Я использовал пример кода дроссельной заслонки для 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.
Мы используем Rails 3.2.2 на Ruby 2.2.
Почему не просто белый список путь/активы? – fatfrog
Это решает проблему для конкретного случая/активов, но не решает более общую проблему каждого запроса, имеющего один и тот же IP-адрес клиента. –