Mod qos

Mod qos — модуль качества обслуживания (QoS) для Apache HTTP Server, реализующий механизмы управления, которые позволяют задавать различный приоритет для разных запросов.

Общие сведения
mod_qos
Тип модуль для Apache HTTP Server
Разработчик Apache Software Foundation
Написана на C
Операционная система кроссплатформенное
Языки интерфейса английский
Последняя версия 11
Репозиторий svn.code.sf.net/p/mod-qo…
Лицензия Лицензия Apache
Сайт mod-qos.sourceforge.net

Описание

Веб-сервер способен одновременно обрабатывать только ограниченное количество запросов. QoS используется для того, чтобы важные ресурсы оставались доступными даже при высокой нагрузке сервера. mod_qos используется для отклонения запросов к неважным ресурсам, одновременно предоставляя доступ к более важным приложениям. Также возможно отключить ограничения на доступ, например, для очень важных ресурсов или пользователей.

Механизмы управления реализованы на следующих уровнях:

  • Управление на уровне запросов: mod_qos управляет числом одновременных запросов к namespace (URL). Это позволяет расставлять разные приоритеты для различных страниц или приложений на одном сервере.
  • Управление на уровне соединений: mod_qos управляет числом TCP-соединений с веб-сервером. Это позволяет ограничивать число соединений от одного клиента или из неизвестных сетей, ограничивать максимальное количество одновременных соединений к виртуальному серверу или реализовывать динамические настройки HTTP keep-alive.
  • Управление пропускной способностью: ограничение скорости запросов/ответов для определённых URL.
  • Фильтрация строк запроса и заголовков: удаление подозрительных запросов или HTTP-заголовков.

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

Примеры использования

Медленно работающее приложение

Mod qos usecase1.gif

Первый пример демонстрирует, как mod_qos помогает избежать отказа в обслуживании веб-сервера из-за медленной работы какого-либо приложения. Если приложение (например, /ccc) работает очень медленно, запросы ожидают завершения до наступления тайм-аута. Из-за большого количества ожидающих запросов у веб-сервера заканчиваются свободные TCP-соединения, и он не может обслуживать другие запросы — например, к приложениям /aaa или /bbb. mod_qos ограничивает количество одновременных запросов к приложению, обеспечивая доступность других ресурсов.

HTTP keep-alive

Расширение keep-alive в HTTP/1.1 позволяет использовать постоянные TCP-соединения для нескольких запросов/ответов. Это ускоряет доступ к серверу за счёт снижения и оптимизации сетевого трафика. Недостаток этой функции — блокировка ресурсов сервера, даже если между клиентом и сервером данные не обмениваются. mod_qos позволяет серверу поддерживать keep-alive только при наличии достаточного числа свободных соединений, прекращая его поддержку при достижении заданного порога соединений.

Клиент открывает много одновременных соединений

Один клиент может попытаться открыть множество параллельных TCP-соединений для загрузки разных данных с веб-сервера. В то время как один клиент занимает все соединения, другие пользователи могут утратить доступ к серверу из-за отсутствия свободных соединений. mod_qos позволяет ограничить количество одновременных соединений от одного IP-адреса.

Большое количество запросов к одному URL

Если необходимо ограничить число запросов к определённому URL, mod_qos позволяет это сделать. Модуль ограничивает максимальное количество запросов в секунду к данному URL. Кроме того, возможно управление пропускной способностью. Достаточно указать максимальную допустимую пропускную способность, и mod_qos будет её регулировать по необходимости.

Защита от DoS-атак малой пропускной способностью

mod_qos может помочь обезопасить сервер Apache от DoS-атак с низкой пропускной способностью, обеспечивая минимальные требования к скорости загрузки/выгрузки для каждого клиента[1].

История

Первый выпуск mod_qos был создан в мае 2007 года и опубликован на SourceForge.net[2] как проект с открытым исходным кодом. Первая версия позволяла ограничивать количество одновременных HTTP-запросов к определённым ресурсам (частям пути URL) на веб-сервере.

Позднее были добавлены новые функции, некоторые из которых оказались полезны для защиты Apache-серверов от DoS-атак[3].[4]

В 2012 году модуль mod_qos был включён в дистрибутив Ubuntu Linux[5].

Основные выпуски:[6]

  • Май 2007, версия 1: Ограничение одновременных запросов для каждого пути URL.
  • Июль 2007, версия 2.2: Появление утилит поддержки.
  • Август 2007, версия 3: Введён контроль соединений и просмотрщик статуса.
  • Сентябрь 2007, версия 4: Ограничение/дросселирование запросов-ответов и фильтрация запросов.
  • Декабрь 2007, версия 5: Ограничения по пользовательским событиям.
  • Март 2008, версия 6: Механизмы контроля для отдельных клиентов (IP).
  • Май 2008, версия 7: Контроль минимальной скорости загрузки/выгрузки для клиента.
  • Сентябрь 2009, версия 9: Обнаружение аномалий на основе характеристик клиента.
  • Февраль 2012, версия 10: Добавлены функции геолокации (коды стран по ISO 3166).
  • Май 2014, версия 11: Значительное улучшение ограничения скорости ответов (ограничение в байтах/сек).
  • Июль 2015, версия 11.15: Сериализация не только на уровне сервера, но и на уровне клиента (IP).
  • Май 2016, версия 11.28: Поддержка дифференцированных сервисов посредством управления полем DSCP в IP-заголовке.

Примечания

  1. Руководство по mod_qos (англ.). Дата обращения: 29 ноября 2012. Архивировано 13 марта 2012 года.
  2. mod_qos на SourceForge.net (англ.) (18 мая 2007). Дата обращения: 24 ноября 2012. Архивировано 14 октября 2025 года.
  3. Marcus Spiegel. How To Defend slowloris DDoS с помощью mod_qos (англ.). HowtoForge (15 июля 2009). Дата обращения: 24 ноября 2012. Архивировано 17 июля 2009 года.
  4. Charly Kuehnast. Из практики системного администратора: mod_qos против Slowloris (нем.). Linux Magazin (май 2010). Дата обращения: 24 ноября 2012. Архивировано 18 августа 2012 года.
  5. Пакет mod_qos для Ubuntu (англ.). Дата обращения: 24 ноября 2012. Архивировано 18 января 2013 года.
  6. Журнал изменений (англ.). Дата обращения: 27 ноября 2012. Архивировано 18 августа 2024 года.

Ссылки