Главная > Программы > Apache
Модуль mod_bandwidth
Установка mod_bandwidth
Предупреждение: Очень важно дать наименьший приоритет mod_bandwidth по сравнению с другими модулями, для того чтобы
они выполнили свою работу перед тем как документы будут отправлены клиенту. По этой причине важно следить эти шаги:
APACI установка
- Скопируйте файл mod_bandwidth.c в каталог Apache.
- Запустите ./configure с следующими директивами --add-module=mod_bandwidth.c --permute-module=BEGIN:bandwidth
- Откомпилируйте Apache.
APXS установка
Ручная установка
- Скопируйте файл 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"
для автоматической очистки этих линков.
Материал взят с сайта: http://www.httpd.kiev.ua/modules/apache-1.3/mod_bandwidth/
Модуль mod_bandwidth для apache1.3.x
для ограничения скорости скачивания контента. Основной недостаток -
понимает только статический контент - динамика нагенерённая при помощи
php пролетает мимо него. Масса настроек - позволяет очень широко
поиграться скоростями по IP, имени домена... Пригодится если необходимо
ограничить скорость скачивания с сайта файлов, музыки или другого
статического хлама (линия обычно-то не резиновая :) - а народ наш халяву
любит).
Ставим из портов:
/usr/home/lissyara/>cd /usr/ports
/usr/ports/>make search name='mod_bandwidth'
Port: mod_bandwidth-2.0.6
Path: /usr/ports/www/mod_bandwidth
Info: Bandwidth management module for the Apache webserver
Maint: apache@FreeBSD.org
B-deps: apache-1.3.34_4 expat-2.0.0 perl-5.8.7_2
R-deps: apache-1.3.34_4 expat-2.0.0 perl-5.8.7_2
WWW: http://www.cohprog.com/mod_bandwidth.html
/usr/ports/>cd /usr/ports/www/mod_bandwidth
/usr/ports/www/mod_bandwidth/>make && make install && make clean
| После установки раскомментируем строчки с модулем в конфиге /usr/local/etc/apache/httpd.conf
LoadModule bandwidth_module libexec/apache/mod_bandwidth.so
AddModule mod_bandwidth.c
| И добавляем туда же следующие строки:
<IfModule mod_bandwidth.c>
# Включен (On), или отключен модуль (Off)
BandWidthModule On
# Директория для хранения временных файлов
BandWidthDataDir /tmp/bandwith
# С какой периодичностью отдавать куски файла
# (Дело в том, что модуль не ограничивает скорость скачивания клиентом,
# он отдаёт данные кусками, на максимальной скорости, а между кусками
# ждёт некоторое время. Вот это время и фирурирует в этом параметре.
# время - в микросекундах! (надо заметить, что при числах меньше
# десяти тыщщ у меня ничё не работало...)
BandWidthPulse 10000
# Собственно скорость, с которой будет отдавать данные клиентам,
# тут же указываются клиенты
# анлим для локалки
BandWidth 192.168. 0
# анлим для моего домена, т.е. для посетителей,
# которых IP резольвится типа gate.lissyara.su ....
BandWidth lissyara.su 0
# Скорость, в байт/секунду для всех остальных, - на
# самом деле 1кб/с - это жестоко... Надо больше...
BandWidth all 1024
# В этом параметре указывается скорость с которой будут отдаваться
# большие файлы - тут же указывается и размер (надо заметить, что
# размер файлов указывается в килобайтах, а скорость в байтах/секунду)
# файл размером больше 100кб будет отдаваться со скоростью 2048 байт/с
LargeFileLimit 100 2048
# файл размером больше 500кб будет отдавать со скоростью 4кб/с
# т.е. при размере от 100 до 500 кб скорость
# будет 2кб - согласно предыдущей директиве
LargeFileLimit 500 4096
# Максимальное число коннектов - 0 анлим.
MaxConnection 100
# Минимальная скорость - пунктик напрямую взаимосвязан с
# парамером BandWidth - т.е. если поставить BandWidth 3кб/с, а
# MinBandWidth 1кб/с то один клиент будет получать все три кб/с
# если клиентов будет два - то получат по полтора кб/с а вот
# если их будет сотня, то каждый получит по килобайту - это то
# и указывается в MinBandWidth. Если поставить 0 - это будет
# дефолтовое значение 256 байт/с, а -1 - тогда будет отдавать
# каждому со cкоростью указанной в BandWidth
# Синтаксис такой же как и у BandWidth
MinBandWidth lissyara.su -1
MinBandWidth all 512
</IfModule>
| Конфиг
для примера - чтоб было видно, что скорость зарубает - в реальной
жизни, конечно, надо будет скорость поднять, иначе посетители уйдут, не
дождавшись загрузки страницы... Затем создаём директорию временных
файлов, и даём на неё права пользователю, от которого бегает apache:
/root/>mkdir /tmp/bandwith
/root/>chown www:wheel /tmp/bandwith
| После чего перезапускаем апач:
/usr/local/etc/apache/>/usr/local/etc/rc.d/apache.sh restart
Stopping apache.
Waiting for PIDS: 6930.
Starting apache.
/usr/local/etc/apache/>
| И меня ожидал облом - не работало.... Скорость какая была ткакая и есть. В httpd-access.log всё было нормально, а вот в /var/log/httpd-error.log сыпались ошибки:
[Fri Feb 3 11:54:00 2006] [error] (2)No such file or directory:
mod_bandwidth : Can't create/access master file
/tmp/bandwith/master/86:282631
[Fri Feb 3 11:54:00 2006] [error] (2)No such file or directory:
mod_bandwidth : Can't create/access master file
/tmp/bandwith/master/86:282631
[Fri Feb 3 11:54:00 2006] [error] (2)No such file or directory:
mod_bandwidth : Can't create/access master file
/tmp/bandwith/master/86:282631
|
Вот как... А по документации он должен был создать субдиректории сам...
Ну и ладно - делаю все, которые он сам должен был сделать:
/usr/local/etc/apache/>mkdir -p /tmp/bandwith/master
/usr/local/etc/apache/>mkdir -p /tmp/bandwith/link
/usr/local/etc/apache/>chown -R www:wheel /tmp/bandwith
| Снова перезапустил - забегало. Если когда-нить буду варезник разворачивать - пригодится :)
Материал взят с сайта: http://www.lissyara.su/?id=1135
Главная > Программы > Apache
|