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