Re: limit_req по нескольким параметрам

Gena Makhomed gmm на csdoc.com
Ср Май 19 10:16:51 MSD 2010


On 19.05.2010 5:19, Сергей Авдюшкин wrote:

> Мы используем limit_req чтобы избежать избыточного числа запросов к
> фронтенду. Клиентов различаем по source IP. Но один из местных
> провайдеров для всех своих клиентов делает SNAT на один-единственный
> IP-адрес.
>
> Провайдер крупный. На пиках его клиенты дают 10-15 хитов/сек, до
> четверти всего нашего трафика. На этих самых пиках и начинает
> срабатывать лимитирование.
>
> С этим провайдером у нас пиринг, чем пользуются некоторые из его
> клиентов, периодически пытаясь пропарсить наш ресурс, вызывая
> значительные всплески нарузки. Т.е. отказаться от использования
> лимитирования запросов конкретно для этого ISP, оставив его для
> остальных -- очень не хотелось бы.
>
> Можно ли использовать с limit_req не одну, а несколько метрик? Например,
> source IP + UserAgent. Если да, то как примерно посчитать требыемый
> размер хранилища для сайта с ~80 хитов/сек? Если нет, то что можно
> сделать в данной ситуации?

из нескольких переменных можно сделать
одну переменную с помощью set или perl_set

$binary_remote_addr - 4 байта, от строки UserAgent
наверное можно считать crc32 через встроенный perl

кстати, такую limit_req защиту легко смогут обойти DoS-боты,
генерируя уникальный UserAgent для каждого своего запроса.

более сложный вариант, использование нескольких limit_req:
http://nginx.org/pipermail/nginx-ru/2010-March/032871.html

-- 
Best regards,
  Gena




Подробная информация о списке рассылки nginx-ru