ПРОЕКТЫ 


  АРХИВ 


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: количество соединений



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

Вся схема может выглядеть так:
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");

А дальше? Что мешает пользователю начать качать в два потока используя
тот же самый идентификатор?
Или одновременно ткнуть в другой файл и начать качать его с другим
идентификатором?




 




Copyright © Lexa Software, 1996-2009.