ПРОЕКТЫ 


  АРХИВ 


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: sleep в обработке запроса



On 8/8/06, Andrew Velikoredchanin <andy@xxxxxxxxxxx> wrote:
drmarker пишет:
> Привет.
>
> Нужен совет уважаемых гуру.
>
> Есть сайт, с которого качают файлы. Есть ограничение по сессиям. В
> случае превышения лимитов выдается 503 service temp unavail. front-end
> - nginx, BE - apache2 prefork с mod_fcgid и perl. Разрешить/запретить
> сессию решает скрипт на BE, который ходит в mysql.
>
> Вопросов два:
> a) поддерживает ли (по опыту, ощущениям, whatever) основная масса
> download managers retry-after header?
> b) имеет ли смысл перед выдачей 503 делать sleep(), чтобы снизить темп
> долбления дятлов с агрессивными download managers?
>
> Скажем, sleep(30). Понятно, что у меня останется висеть процесс на BE,
> но зато это снизит общее количество выполнений процессов, выдающих
> 503. База меньше дергается, то се. И против DoS лучше защиты,
> наверное, нет.

IMHO, это приведет именно к DOS, т.к. у тебя будет под апачем висеть
куча процессов на sleep(30) и их максимальное количество у тебя
достигнеться очень быстро.

Да, верно.

> Второй путь - забить вообще :)
>
> Третий - забить, но между скриптом и mysql поставить memcached с expire.
>
> Что предпочесть?
>
> И нельзя ли применить какую-нибудь хитрую фичу nginx, чтобы решить эту
> проблему как-то изящнее?

В nginx такой фичи вроде нет, но зато на апаче можно сделать зачиту от
частых долбильщиков. Там какой-то модуль для этого есть (не могу
вспомнить название). В нем можно задавать максимальную частоту запросов
с одного IP. В сочетании с mod_rpaf, подставляющего реальный IP, должен
нормально работать.

Вы навели меня на мысль, что это можно сделать вообще средствами
iptables, например.

iptables -A FORWARD -p tcp -s xxx.xxx.xxx.xxx --dport 80 -m limit
--limit 20/m -j ACCEPT

Спасибо.


 




Copyright © Lexa Software, 1996-2009.