ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: limit_req по нескольким пара метрам
  • From: Gena Makhomed <gmm@xxxxxxxxx>
  • Date: Wed, 19 May 2010 09:16:51 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csdoc.com; s=dkim; t=1274249811; bh=Feh2wHyw+actPOTAzJIafdHQXIrIdCmiUwnHxM5o+AQ=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: References:In-Reply-To:Content-Type:Content-Transfer-Encoding; b=B UnFAOTMHP4u2SAtfP/6L/0Ql1XAL56CLCa08dLDvDvoe+qHrZ0v8RcNIqwsrOnCAXkR Ro4JXCRyglaXMiLOQsKR4PU4crCgQkwfEoiG03RGxN1dddmZoKZCEa/gQvnkyyjf1zO UPUY01XJ0qTpnRhi+FYpvKZbubFC5oO+GnOk=
  • In-reply-to: <4BF34A9B.2000805@xxxxx>
  • References: <4BF34A9B.2000805@xxxxx>

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 mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.