This version of the page http://www.rx-support.net/index.php/article/mod_qos (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2011-09-22. The original page over time could change.
Модуль mod_qos | RX-HOST

Модуль mod_qos

Author admin acount on October 29, 2010 | Print | Bookmark



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

Примеры ситуация, когда можно использовать mod_qos:

* Управление интенсивностью выполнения длительных по времени и ресурсоемких
запросов, предотвращение одновременного выполнения большого числа таких запросов;

* Защита от исчерпания пропускной способности канала связи из-за слишком
большого числа одновременных обращений к определенным данным (например, когда
пользователь сделал доступным для загрузки файл большого размера и широко его разрекламировал)

* Защита от простейших DDoS-атак.

Некоторые примеры ограничений, реализуемых через mod_qos ограничений:

* Ограничение максимального числа одновременных соединений для заданной части
сайта, URL или виртуального хоста.

* Ограничение пропускной способности, числа запросов в секунду или объема
трафика в секунду для любой части сайта;

* Ограничение числа выполнения определенных типов запросов в секунду;

* Не применение ограничений для определенных адресов или пользователей;

* Фильтрация по совпадению маски в HTTP-заголовке или теле запроса;

* Ограничение размера передаваемых в рамках запроса данных;

* Ограничение на уровне параметров TCP-соединений, например, ограничение
максимального числа запросов с одного IP, динамическое изменение keep-alive и т.п.

* Обеспечение доступа с заданных IP в случае исчерпания свободных сокетов.

Пример установки и настройки типовой конфигурации в Debian/GNU Linux

На сайте http://mod-qos.sourceforge.net/ приведен большой набор практических
примеров конфигурации mod_qos. Рассмотрим типовой вариант.

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

Устанавливаем пакеты, необходимые для сборки модулей Apache:

   apt-get install apache2-threaded-dev gcc

Загружаем архив с исходными текстами mod_qos с сайта http://sourceforge.net/projects/mod-qos/

   wget http://downloads.sourceforge.net/project/mod-qos/9.29/mod_qos-9.29.tar.gz?use_mirror=voxel
   tar xvfz mod_qos-9.29.tar.gz

Собираем и устанавливаем:

   cd mod_qos-9.29/apache2/
   apxs2 -i -c mod_qos.c  или apxs -i -c mod_qos.c


После этого модуль будет установлен как /usr/lib/apache2/modules/mod_qos.so

Активируем модуль в Apache. В директории Include /usr/local/apache/conf/ создаем
файл qos.conf

В httpd.conf добавляем строку для загрузки модуля:

   LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so
   Include “/usr/local/apache/conf/qos.conf”

В qos.conf (определяем конфигурацию модуля (подобные блоки конфигурации можно
привязывать к отдельным блокам Location и VirtualHost):


## Настройка QoS
<IfModule mod_qos.c>

    # Размер буфера обрабатываемых IP-адресов клиентов.
    # По умолчанию 50 тыс. На каждый IP тратится 63 байта
    QS_ClientEntries 100000

    # Максимальное число одновременных соединений с одного IP
    QS_SrvMaxConnPerIP 50

    # Максимальное количество активных соединений TCP ограничен до 256
    MaxClients              256

    # Отключаем keep-alive когда достигнуто значение в 70% от максимального лимита соединений
    QS_SrvMaxConnClose      70%

    # Минимальный запрос/ответ скорости (Не допускает медленных клиентов которые блокируют сервер):
    QS_SrvMinDataRate       150 1200

    # и ограничение заголовка запроса и тела
    LimitRequestFields      30
    QS_LimitRequestBody     102400

    # Недопускаем более 20 запросов в секунду для заданного URL
    QS_LocRequestPerSecLimit /download/file.txt 20
   
    # Понижаем лимит для отдельных URL
    QS_LocRequestLimit      /aaa                100
    QS_LocRequestLimit      /bbb                50
    QS_LocRequestLimit      /ccc                10
    QS_LocRequestLimitMatch "^(/dd1/|/dd2/).*$" 100

    # Для заданного Location блокируем запросы по масками, для защиты от подстановки SQL запросов
    <Location /app>
          QS_DenyQueryBody              on
          QS_DenyQuery       +s01       deny "(EXEC|SELECT|INSERT|UPDATE|DELETE)"
    </Location>

    # Пример установки разных лимитов в зависимости от типа браузера, для ботов ставим более жесткие лимиты
    BrowserMatch             "slurp"        QS_Cond=spider
    BrowserMatch             "googlebot"    QS_Cond=spider

    QS_LocRequestLimitMatch       "^(/app/b/|/app/c/).*$"  300
    QS_CondLocRequestLimitMatch   "^(/app/b/|/app/c/).*$"  10   spider

    # События, связанные с блокировками сохраняем в отдельном логе
    CustomLog     logs/qsaudit_log  "%{qos-path}n%{qos-query}n"

</IfModule>

Was this article helpful?

Yes No

Category: Модули Apache

Last updated on October 29, 2010 with 294 views