Re: количество соединений

drmarker drmarker at gmail.com
Mon May 15 15:04:48 MSD 2006


Это ответ на вопрос "как ограничить истинное число подключений
от одного пользователя?", то есть как с достаточной точностью отличить
нового пользователя от старого.

Вся схема может выглядеть так:
1. у вас nginx (frontend) и apache (backend);
2. nginx все запросы на скачивание передает (proxy_pass) для авторизации apache;
3. apache вычисляет уникальный ID сессии;
4. если по его данным сессий с таким ID меньше максимально допустимых
- отдает nginx в заголовке ответа X-Accel-Redirect; если равно или
больше - 503 или 404 код;
5. nginx, получив X-Accel-Redirect, отдает файл, как обычно.
6. на backend висит (customLog в трубу) скрипт, который декрементирует
счетчик активных сессий, ориентируясь на строчки в логах.

Пункт 3 можно усовершенствовать, выдавая пользователю при входе на
сайт куку и включая ее в URL, то есть юзер на странице со ссылками
видит ссылки типа www.download.com/files/<cookie id>/file.exe.

Пункт 4 можно сделать на memcached, например. Тогда счетчик сессий
может быть не только для локальной машины, а для нескольких.

Понятно, что это не 100% решение и требует дополнительного backend
(или, как минимум, fcgi-spawn), но работать будет и остроту проблемы
снимет. А уж совсем умников придется ручками ловить и наказывать :)

Несколько путанно написал. Если непонятно - скажите, поясню.

On 5/15/06, Eugene <my-subscr at mail.ru> wrote:
> drmarker пишет:
>
> > my($uniqid) = Digest::MD5:md5_hex("$remote_addr + $useragent + $uri");
>
> А дальше? Что мешает пользователю начать качать в два потока используя
> тот же самый идентификатор?
> Или одновременно ткнуть в другой файл и начать качать его с другим
> идентификатором?
>
>


More information about the nginx-ru mailing list