Re: sleep в обработке запроса

drmarker drmarker at gmail.com
Wed Aug 9 02:01:39 MSD 2006


On 8/8/06, Andrew Velikoredchanin <andy at atomail.com> 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

Спасибо.


More information about the nginx-ru mailing list