Как я могу ограничить пропускную способность сервера для пользователя, а не для веб-страницы?

Я хотел бы ограничить скорость загрузки моих файлов.flv и.mp4 для каждого пользователя в моем домене. У моей страницы 1000-3000 посетителей в день, и они не могут смотреть мои вещи одновременно, потому что 1-2 человека получают всю мою пропускную способность.

Я хотел бы дать 200 КБ / с / пользователя...

Если в моем потоке 10 слушателей, то они используют 2Mib/s, а не 30-40Mib/s... И я бы хотел дать им минимум..

Я попробовал модуль Bandwidth, но он работает для доменов, а не для пользователей..

BandwidthModule On ForceBandWidthModule On LargeFileLimit.flv 1 204800 LargeFileLimit.mp4 1 204800

Есть ли легко устанавливаемый модуль apache? Или я могу ограничить только загрузку волокон? ... Ограничение скорости загрузки по IP или соединению...

3 ответа

Решение

Это выглядит как mod_cband это, вероятно, ваш лучший выбор. CBandRemoteSpeed Директива, в частности, ограничивает количество соединений, количество соединений в секунду и скорость соединения на IP-адрес клиента. Кажется, у него нет опции "для каждого типа файла". Согласно документации это установлено в соответствии <VirtualHost> поэтому, если вы хотите ограничить только файлы.flv и.mp4, вам нужно переместить их на виртуальный хост самостоятельно (скажем, streaming.example.com) и включите cband там.

Если не существует внутреннего решения Apache, и мы говорим о Linux здесь, возможно, есть возможность сделать это с формированием трафика. Все, что вам нужно, это возможность (быстро) сообщить вне Apache, что соответствующий процесс принадлежит определенному пользователю. Возможно, вы можете переписать URL-адреса ваших файлов, чтобы Apache вместо этого вызывал скрипт PHP. Сценарий будет определять пользователя и идентификатор процесса и записывать их в небольшой "демон" (например, сценарий Python) перед отправкой запрошенных данных. Этот демон добавил бы правило iptables с параметром --pid-owner (больше не работает, см. Ниже: Edit) в таблицу mangle и пометил пакет (один номер для каждого (активного) пользователя).

Вы должны определить класс HTB для каждого одновременно активного пользователя. Фильтры tc назначают каждому пакету один из этих классов в зависимости от установленного iptables nfmark. Вы можете решить, имеют ли жесткие ограничения для этих классов 200 КБ / с, или дополнительно получить запасную полосу пропускания. Таким образом, не имеет значения, сколько соединений открыто пользователю, ограничение является глобальным для всех из них.

Время от времени "демону" приходится проверять, все ли еще процессы существуют, и удалять правила для тех, которые уже прошли.

редактировать

Похоже, что опция --pid-owner была удалена из iptables. Возможность фильтрации на основе пользователя или группы, вероятно, не помогает. Но PHP-скрипт знает адрес назначения, поэтому он может вызывать скрипт с этими параметрами, который создает соответствующее правило.

Как уже упоминалось DerfK, mod_cbandбудет выполнять работу быстро и грязно, но этопотребляет много ресурсов процессора для более высокой нагрузки.

Волшебство, которое стоит за профессиональным регулированием пропускной способности, состоит в том, чтобы предоставлять его как отдельный сервис.

Если вы находитесь в среде с колоколингом, вы можете начать с дополнительной машины 1HE.

Другие вопросы по тегам