Главная  //  Модули  //  Apache 1.3  //  mod_bandwidth

mod_bandwidth

Модуль mod_bandwidth
Сервер Apache 1.3.x
Домашняя страница: www.cohprog.com/mod_bandwidth.html

Установка mod_bandwidth

Предупреждение: Очень важно дать наименьший приоритет  mod_bandwidth по сравнению с другими модулями, для того чтобы они выполнили свою работу перед тем как документы будут отправлены клиенту. По этой причине важно следить эти шаги:

APACI установка

  • Скопируйте файл mod_bandwidth.c в каталог Apache.
  • Запустите ./configure с следующими директивами  --add-module=mod_bandwidth.c --permute-module=BEGIN:bandwidth
  • Откомпилируйте Apache.

 APXS установка

  • Откомпилируйте модуль:
    /path_to_apache/bin/apxs -c /path/mod_bandwidth.c -o /path_to_apache/libexec/mod_bandwidth.so
  • Дополните директивы в httpd.conf :
    LoadModule bandwidth_module libexec/mod_bandwidth.so
    AddModule mod_bandwidth.c

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

Ручная установка

  • Скопируйте файл mod_bandwidth.c в "src/modules/extra" каталога Apache.
  • Скопируйте  "src/Configuration.tmpl" в "src/Configuration"
  • Отредактируйте "src/Configuration" и добавьте вначале:
    AddModule modules/extra/mod_bandwidth.o
  • Запустите "./Configure"
  • Откомпилируйте Apache

Создайте необходимые директории и права "read/write/execute" для пользователя, под которым запущен Apache. По умолчанию, mod_bandwidth использует следующие директории, которые можно изменить в директиве BandWidthDataDir:

/tmp/apachebw
/tmp/apachebw/link
/tmp/apachebw/master

Если эти каталоге не существуют или не доступны, то модуль будет недоступен. В некоторых системах каталог /tmp очищается при загрузке, в этом случае измените BandWidthDataDir.

Конфигурационные директивы mod_bandwidth:

BandWidthDataDir
Syntax : BandWidthDataDir <directory>
Default : "/tmp/apachebw"
Context : server config

Установить корневой каталог для временных файлов mod_bandwidth. Не забудьте создать: <directory>/master и <directory>/link

BandWidthModule
Syntax : BandWidthModule <On|Off>
Default : Off
Context : per server config

Включить или выключить модуль. По умолчанию модуль отключен. Если вы устанавливаете ограничение пропускной способности внутри директивы VirtualHost, вам необходимо также "BandWidthModule On" внутри этого блока.  Если вы устанавливаете ограничение пропускной способности внутри директивы Directory (за пределами VirtualHost), вам необходимо указать только один раз "BandWidthModule On" за пределами любого VirtualHost или Directory блока.

BandWidthPulse
Syntax : BandWidthPulse <microseconds>
Default :
Context : per server config

Изменение алгоритма используемого для расчета пропускной способности и передачи данных. В нормальном режиме (старый режим), модуль пытается передавать данные пакетами 1KB. Это означает, что если пропускная способность равна 512B, то модуль передаст 1KB, подождет 2 секунды, передаст следующие 1KB и т.д.

Установка значения "BandWidthPulse", будет изменять изменять алгоритм так, что сервер всегда будет ждать тоже время между передачей пакета, но размер пакета будет изменяться. Значение задается в миллисекундах. Например, если установить "BandWidthPulse 1000000" (1 сек) и ширина канала 512B, то сервер передаст 512B, подождет 1 секунду, передаст 512B и т.д.

Преимуществом является равномерность потока данных, недостатком есть большие накладные расходы передачи данных для заголовка пакета. Установка слишком малых значений (до 1/5 сек) не очень полезно и будет больше загружать систему и генерировать больше трафика.

Directory / VirtualServer директивы

BandWidth
Syntax : BandWidth <domain|ip|all> <rate>
Default : none
Context : per directory, .htaccess

Пропускная способность для файлов в этом каталоге и подкаталогах для удаленного хоста <domain> или <ip> адреса или всех <all> удаленных хостов.  IP адреса могут задаваться в формате 192.168.0.0/21. <rate> в Bytes/second. <rate>  "0" - без ограничений.

Несколько BandWidth limits могут быть установлены для одного и того же каталога и устанавливать различные пределы для различных хостов. В этом случае, важен порядок "BandWidth", модуль будет брать первую запись, которая удовлетворяет адресу клиента. Например,

<Directory /home/www>
BandWidth ecp.fr 0
BandWidth 138.195 0
BandWidth all 1024
</Directory>

Устанавливает ограничение для /home/www и всех поддиректорий равное 1024B/sec, кроме .ecp.fr и 138.195 - без ограничений.

LargeFileLimit
Syntax : LargeFileLimit <filesize> <rate>
Default : none
Context : per directory, .htaccess

Установить максимальный <rate> (in bytes/sec) для передачи файлов размера  <filesize> KBytes или больше. Несколько "LargeFileLimit" могут быть установлены для различных размеров.

<rate> "0" - нет никаких ограничений по размеру

<rate> "-1" - нет никаких ограничений для даного типа файлов. Это переписывает даже ограничение BandWidth. Может быть полезным для определения приоритета для маленьких файлов (html страницы, маленькие картинки).  Например,

If the following limits are set :
LargeFileLimit 200 3072
LargeFileLimit 1024 2048

Файлы меньше чем 200KBytes не ограничиваются. Файлы от 200KBytes (включая) до 1023Kbytes (включая) будут передаваться 3072Bytes/sec и файлы больше 1024Kbytes - 2048Bytes/sec. 

MaxConnection
Syntax : MaxConnection <connections>
Default : 0 (unlimited)
Context : per directory, .htaccess

Ограничить максимальное количество соединений. Если предел достигнут, новые соединения будут отклонены.Значение "0" - нет ограничений.

MinBandWidth
Syntax : MinBandWidth <domain|ip|all> <rate>
Default : all 256
Context : per directory, .htaccess

Установить минимальную пропускную способность передачи данных. This over-ride both BandWidth and LargeFileLimit rules as well as the calculated rate based on the number of connections.

Первый аргумент аналогичный BandWidth. <rate> в байтах за секунду. Значение "0" указывает использовать минимальное значение (256 Bytes/sec). 

Если BandWidth установлена "3072" (3KBytes/sec) и MinBandWidth равно "1024" (1KBytes/sec) то :

  • если одно соединение, то скорость передачи будет равна 3072 Bytes/sec.
  • если два соединения, то скорость передачи каждого файла будет равна  1536 Bytes/sec.
  • если три или больше соединений, то скорость передачи каждого файла будет равна  1024 Bytes/sec. (Minimal of 1024 Bytes/sec).

Если MinBandWidth равно "-1", то :

  • если одно соединение, то скорость передачи будет равна 3072 Bytes/sec.
  • если два или больше соединений, то скорость передачи каждого файла будет равна  3072 Bytes/sec. (Minimal of 1024 Bytes/sec).

Дополнительные замечания:

  • Если оба "BandWidth" и "LargeFileLimit" определены, то выбирается наименьшее. (Но не меньше чем "MinBandWidth") .
  • Если есть два ограничения в VirtualServer и Directory, то приоритет отдается второму.
  • Если ограничение определено за пределами Directory или VirtualHost, то оно будет действовать по умолчанию на все виртуальные сервера.

Запуск Apache

Для корректного результата важно отсутствие мертвых линков в каталоге mod_bandwidth. Хорошая идея запустить "cleanlink.pl" для автоматической очистки этих линков.