The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Использование mod_qos для минимизации паразитной нагрузки на сайт
Apache-модуль mod_qos (http://mod-qos.sourceforge.net/) позволяет организовать
разделение запросов по приоритетам и обеспечить выполнение только приоритетных
запросов при таких нештатных ситуациях, как перегрузка сервера. В качестве
реакции при нехватке серверных ресурсов 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 с сайта ttp://sourceforge.net/projects/mod-qos/

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

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

   cd mod_qos-9.9/apache2/
   apxs2 -i -c mod_qos.c

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

Активируем модуль в Apache. В директории /etc/apache2/mods-available создаем
два файла qos.load и qos.conf

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

   LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so

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

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

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

       # Общее максимальное число одновременных обращений к серверу 
       MaxClients              256 
  
       # Понижаем лимит для отдельных URL
       QS_LocRequestLimit      /aaa                100
       QS_LocRequestLimit      /bbb                10
       QS_LocRequestLimit      /ccc                5
       QS_LocRequestLimitMatch "^(/dd1/|/dd2/).*$" 100

       # Недопускаем более 50 запросов в секунду для заданного URL
       QS_LocRequestPerSecLimit /download/file.iso 50

       # Не распространять правила блокировки на запросы, пришедшие с заголовком mod-qos-login
       QS_VipIPHeaderName      mod-qos-login


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

       # Минимальная скорость поступления запросов и генерации ответов, 
       # позволяет защитить сервер от наводнения медленными запросами, которые длительное время висят без передачи данных
       QS_SrvMinDataRate       150 1200

       # Ограничение размера заголовков и тела запроса (следует изменить в соответствии со спецификой сайта)
       # LimitRequestFields      30
       # QS_LimitRequestBody     102400

       # Отключаем лимит для заданных подсетей
       QS_SrvMaxConnExcludeIP                    172.18.3.32
       QS_SrvMaxConnExcludeIP                    192.168.10.

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

       # Ограничиваем размер тела запроса в зависимости от mime-типа (для работы требуется модуль mod_parp):

       SetEnvIfNoCase Content-Type application/x-www-form-urlencoded  QS_LimitRequestBody=131072
       SetEnvIfNoCase Content-Type multipart/form-data               QS_LimitRequestBody=131072
       SetEnvIfNoCase Content-Type multipart/mixed                   QS_LimitRequestBody=131072

       # Для заданного 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

</IfModule>

Активируем модуль и перезапускаем apache:

   a2enmod qos
   /etc/init.d/apache2 restart

При просмотре статистики через открытие http://ваш_сайт/server-status можно
посмотреть дополнительную информацию о работе и настройках mod_qos.
  
 
01.03.2010 , Источник: http://www.howtoforge.com/how-to-de...
Ключи: apache, limit, bandwidth, qos, dos / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Ограничение доступа и ресурсов, безопасность

Обсуждение [ RSS ]
  • 1.1, Аноним (-), 13:17, 01/03/2010 [ответить]  
  • +/
    пока юзеры опача бодаются с этой хренью, юзеры нжынксы просто обслуживают всех клиентов без проблем.
     
     
  • 2.2, Аноним (-), 13:31, 01/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >пока юзеры опача бодаются с этой хренью, юзеры нжынксы просто обслуживают всех
    >клиентов без проблем.

    И что юзеры nginx только статику отдают или какие-то особенные СУБД и скрипты на сатах используют, выдерживающие тысячи одновременных запросов ? Или вы вывод надписи "сервер перегружен" тоже за обслуживание принимайте ?

     
     
  • 3.3, Аноним (-), 13:54, 01/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    некоторым очень хочется чем-то выделиться. Цветом майки, формой шапки, используемым ПО ...
     
  • 2.4, Александр (??), 23:50, 01/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, настрогав весь сайт в статику :)

    Опять же, сколько стОит каждый клиент? Есть такие клиенты, ради которых не жалко по целому серверу физическому поставить - пусть хоть так, но крутится тот "волшебный" софт, что так нужен такому замечательному (и выгодному) клиенту.

     
     
  • 3.5, User294 (ok), 03:58, 08/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Ага, настрогав весь сайт в статику :)

    Вообще, есть такая штука - кеширование называется. Зачастую - тупо дергать скрипт 1000 раз в секунду при том что результат все 1000 раз одинаковый. Можно, разумеется, отапливать воздух и делать мартышкину работу. Но вот нафига? По сути отдача статики и получается.

    >Опять же, сколько стОит каждый клиент? Есть такие клиенты, ради которых не
    >жалко по целому серверу физическому поставить

    Да... а если вас посетит ботнет из нескольких тысяч ботов - вы, очевидно, отгрохаете по этому поводу пачку датацентров? А пупок не развяжется? :)

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

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

     

  • 1.6, ро (?), 22:33, 08/03/2010 [ответить]  
  • +/
    ># Отключаем keep-alive когда достигнуто значение в 70% от максимального лимита соединений
    >QS_SrvMaxConnClose      180

    интересная фича!

     
  • 1.7, Oleksa (?), 23:38, 08/03/2010 [ответить]  
  • +/
    Получил вот такую ошибку

    mod_qos(003): request level rule httpd://www.lala.org.ua has no concurrent request limitations

    Чтоб ето значило?...

     
     
  • 2.8, meph1st (?), 10:58, 12/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    use source
     

  • 1.9, Виталий (??), 05:32, 20/03/2010 [ответить]  
  • +/
    Скажите как запустить этот фаил mod_qos-9.10.tar.gz.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру