Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: количество соединений
Это ответ на вопрос "как ограничить истинное число подключений
от одного пользователя?", то есть как с достаточной точностью отличить
нового пользователя от старого.
Вся схема может выглядеть так:
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@xxxxxxx> wrote:
drmarker пишет:
> my($uniqid) = Digest::MD5:md5_hex("$remote_addr + $useragent + $uri");
А дальше? Что мешает пользователю начать качать в два потока используя
тот же самый идентификатор?
Или одновременно ткнуть в другой файл и начать качать его с другим
идентификатором?
|