mod_cband - накладываем ограничения на виртуальные хосты

Версия для печатиОтправить другуPDF version

mod_cbandmod_cband - служит для ограничения пропускной способности виртуального хоста, ограничения количества запросов и открытых соединения. Также есть возможность устанавливать ограничения на обьем переданной информации. После достижения лимита обьема можно либо блокировать доступ, либо изменить скорость доступа.

Ознакомиться со всеми возможностями модуля можно на странице проэкта.

Модуль явно используется хостерами, но и в частном случае может пригодится.

Итак, перейдем от слов к делу. Выполним установку модуля из системы портов:

# cd /usr/ports/www/mod_cband && make install clean && rehash

Установка прошла без проблем... Теперь  пора разобраться как работает модуль.


Итак, единицы измерения, которые поддерживаются модулем.

Скорость передачи данных

  • kbps, Mbps, Gbps - множители бит/с. Соответственно 1024, 1024*1024 и 1024*1024*1024 бит/с.
  • kb/s, Mb/s, Gb/s - множители байт/с. Соответвенно 1024, 1024*1024 и 1024*1024*1024 байт/с.

По умолчанию - бит/с.

Квотирование

  • K, M, G - множители байт. Соответственно 1000, 1000*1000 and 1000*1000*1000 байт.
  • Ki, Mi, Gi - множители байт. Соответственно 1024, 1024*1024 and 1024*1024*1024 байт.

По умолчанию - K.

Временные периоды

  • S, M, H, D, W - множители секунд. Секунды, минуты, часы, дни и недели соответственно. 1, 60, 3600, 86400 и 604800 секунд.

По умолчанию - S.


mod_cband  поддерживает следующие ключи.

Ключ:		CBandDefaultExceededURL
Описание:		URL по умолчанию, куда mod_cband должен перенаправить все запросы
		к виртуальному хосту (или пользователю) после превышения квоты.
ПРИМЕЧАНИЕ: 	Если не указать URL, при достижении лимита будет отправлен код ответа 
		503 (Service Unavailable).
Синтаксис:	CBandDefaultExceededURL URL
Пример:		CBandDefaultExceededURL http://muff.kiev.ua/forbidden.html

Ключ:		CBandDefaultExceededCode
Описание:		HTTP-код, отправленный пользователю, когда квота будет превышена.
Синтаксис:	CBandDefaultExceededCode HTTP_CODE
Пример:		CBandDefaultExceededCode 509

Ключ:		CBandScoreFlushPeriod
Описание:		Период, по окончании которого счет для виртуалхоста или пользователя будет
		записан в файл.
Синтаксис:	CBandScoreFlushPeriod number_of_requests
Пример:		CBandScoreFlushPeriod 100

Ключ:		CBandSpeed
Описание:		Указывает максимальную скорость для виртуалхоста.
Синтаксис:	CBandSpeed  kbps rps max_conn
		kbps - максимальная скорость передачи
		rps - максимальное количество запросов в секунду
		max_conn - максимальное количество одновременных подключений
Пример:		CBandSpeed 1024 10 30

Ключ:		CBandRemoteSpeed
Описание:		Указывает максимальную скорость для любого удаленного клиента.
Синтаксис:	CBandRemoteSpeed kbps rps max_conn
		kbps - максимальная скорость передачи
		rps - максимальное количество запросов в секунду
		max_conn - максимальное количество одновременных подключений
Пример:		CBandRemoteSpeed 20kb/s 3 3

Ключ:		CBandClassRemoteSpeed
Описание:		Указывает максимальную скорость для любого удаленного клиента в зависимости
		от значений класса.
Синтаксис:	CBandClassRemoteSpeed class_name kbps rps max_conn
		class_name - название определенного класа
		kbps - максимальная скорость передачи
		rps - максимальное количество запросов в секунду
		max_conn - максимальное количество одновременных подключений
Пример:		CBandClassDst 66.249.64/24
		CBandClassDst 66.249.65/24
		CBandClassDst 66.249.79/24
		CBandClassRemoteSpeed googlebot_class 20kb/s 2 3

Ключ:		CBandRandomPulse
Описание:		Генератор случайных импульсов, является частью ограничителя скорости.
Синтаксис:	CBandRandomPulse On / Off
Пример:		CBandRemoteSpeed On

Ключ:		CBandLimit
Описание:		Задает квоту для виртуалхоста.
Синтаксис:	CBandLimit limit
		Лимит - доступные величины: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
Пример:		CBandLimit 10M
		Задает квоту 10*1000*1000 байт
		CBandLimit 10Mi
		Задает квоту 10*1024*1024 байт

Ключ:		CBandClassLimit
Описание:		Задает квоту для виртуалхоста.
Синтаксис:	CBandClassLimit class_name limit
		class_name - название определенного класа
		Лимит - доступные величины: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)

Ключ:		CBandExceededURL
Описание:		Задает URL, на который будут перенаправлены запросы, когда ограничения 
		будут превышены.
ПРИМЕЧАНИЕ: 	Если не указать URL, при достижении лимита будет отправлен код ответа 
		503 (Service Unavailable).
Синтаксис:	CBandExceededURL URL
Пример:		CBandExceededURL http://muff.kiev.ua/forbidden.html

Ключ:		CBandExceededSpeed
Описание:		Задает максимальную скорость, до которой mod_cband понизит скорость в случае
		превышения квоты.
Синтаксис:	CBandExceededSpeed kbps rps max_conn
		kbps - максимальная скорость передачи
		rps - максимальное количество запросов в секунду
		max_conn - максимальное количество одновременных подключений

Ключ:		CBandScoreboard
Описание:		Задает scoreboard-файл для виртуалхоста.
Синтаксис:	CBandScoreboard path
ПРИМЕЧАНИЕ: 	Файл должен быть доступен для записи пользователем, от имени которого работает
		процесс Apache.

Ключ:		CBandPeriod
Описание:		Задает период, после которого счетчики ограничений обнуляются.
Синтаксис:	CBandPeriod period
Пример:		CBandPeriod 1W
		CBandPeriod 60М

Ключ:		CBandPeriodSlice
Описание:		Задает длину части периода.
Синтаксис:	CBandPeriodSlice slice_length
Пример:		CBandLimit 100G
		CBandPeriod 4W
		CBandPeriodSlice 1W
		Период будет разделен на 4 части (4W/1W = 4). 
		Для каждой части задано ограничение в 25G (100G/4=25G)

Ключ:		
Описание:		Задает имя cband-пользователя.
Синтаксис:	user_name >

Ключ:		CBandUserSpeed
Описание:		Задает максимальную скорость для cband-пользователя.
Синтаксис:	CBandUserSpeed  kbps rps max_conn
		kbps - максимальная скорость передачи
		rps - максимальное количество запросов в секунду
		max_conn - максимальное количество одновременных подключений
Пример:		CBandUserSpeed 100kb/s 10 5

Ключ:		CBandUserLimit
Описание:		Задает квоту cband-пользователя.
Синтаксис:	CBandUserLimit limit
		Лимит - доступные величины: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)
Пример: CBandUserSpeed 10M Задает квоту 10*1000*1000 байт CBandUserSpeed 10Mi Задает квоту 10*1024*1024 байт

Ключ:		CBandUserClassLimit
Описание:		Задает квоту cband-пользователя в зависимоти от класа назначения.
Синтаксис:	CBandUserClassLimit class_name limit
		class_name - название определенного класа
		Лимит - доступные величины: K (kilo), M (mega), G (giga), Ki (kibi), Mi (mebi), Gi (gibi)

Ключ:		CBandUserExceededURL
Описание:		Задает URL, на который будут перенаправлены запросы, когда квота cband-пользователя
		будет превышена.
Синтаксис:	CBandUserExceededURL URL
ПРИМЕЧАНИЕ: 	Если не указать URL, при достижении лимита будет отправлен код ответа 
		503 (Service Unavailable).
Пример:		CBandUserExceededURL http://muff.kiev.ua/forbidden.html

Ключ:		CBandUserExceededSpeed
Описание:		Задает максимальную скорость для cband-пользователя после превышения квоты.
Синтаксис:	CBandUserExceededSpeed kbps rps max_conn
		kbps - максимальная скорость передачи
		rps - максимальное количество запросов в секунду
		max_conn - максимальное количество одновременных подключений
Пример:		CBandUserExceededSpeed 10kb/s 5 3

Ключ:		CBandUserScoreboard
Описание:		Задает scoreboard-файл для cband-пользователя.
Синтаксис:	CBandUserScoreboard path
ПРИМЕЧАНИЕ: 	Файл должен быть доступен для записи пользователем, от имени которого работает 
		процесс Apache.

Ключ:		CBandUserPeriod
Описание:		Задает период, после которого счетчики ограничений cband-пользователя обнуляются.
Синтаксис:	CBandUserPeriod period
Пример:		CBandUserPeriod 1W
		CBandUserPeriod 60М

Ключ:		CBandUserPeriodSlice
Описание:		Задает длину части периода для cband-пользователя.
Синтаксис:	CBandUserPeriodSlice slice_length
Пример:		CBandUserLimit 100G
		CBandUserPeriod 4W
		CBandUserPeriodSlice 1W
		Период будет разделен на 4 части (4W/1W = 4).
		Для каждой части задано ограничение в 25G (100G/4=25G)

Итак, попробуем ограничить ресурсы для определенного виртуального хоста. Чтобы упростить задачу, пусть на этом виртуальном хосте будет установлен Speedtest.

В конфигурационный файл виртуалхоста добавлены следующие переменные:

CBandSpeed 1024 10 30
CBandRemoteSpeed 256 4 4
CBandExceededURL http://muff.kiev.ua/
CBandLimit 15Mi
CBandPeriod 4W
CBandScoreboard /usr/local/etc/apache22/scoreboard/test.muff.kiev.ua.scoreboard

Создадим каталог, где будут храниться scoreboard-файлы и выставим необходимые права:

# mkdir /usr/local/etc/apache22/scoreboard

# chown -R www:www /usr/local/etc/apache22/scoreboard

Перезапускаем Apache, чтобы изменения вступили в силу:

# apachectl graceful

Проверяем, сработали ли ограничения по скорости:

Image

Как видим, ограничения сработали только на исход (относительно сервера), а на вход ограничения не работают. Но, на мое  мнение, это не так и страшно.

Поганял еще Speedtest, чтобы достигнуть квоты в 15 мегабайт. По достижению квоты, сработал ключ CBandExceededURL, соответственно был перенаправлен на указанный URL.

Все доступные возможности проверять не стал, остановился только на указанных.

Кстати, mod_cband также поддерживает возможность отображения статистики. Для активации даной возможности необходимо добавить в конфигурационный файл виртуалхоста следующий блок:

<Location /cband-status>
        SetHandler cband-status
</Location>
<Location /cband-status-me>
        SetHandler cband-status-me
</Location>
 

После внесения изменений необходимо перезапустить веб-сервер:

# apachectl graceful

Для просмотра статистики необходимо зайти по ссылке http://имя_виртуального_хоста/cband-status. Результат будет примерно следующий:

 

Image 

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

Ваша оценка: Нет Средняя: 2.8 (4 голоса)

Вставай, Україно!

Литература