Защита от F5. Настраиваем Apache правильно.

 4 мая 2015      
 GNU Linux - CentOS / Debian      
 Метки:  ,       
 комментариев 5

Нажав клавишу F5 в окне браузера и удерживая ее в течении нескольких минут вы можете устроить легкую DDOS атаку на сайт. Функциональная клавиша F5 дает команду браузеру перезагрузить страницу.

Если вы ее нажали и удерживаете длительное время, то ваш компьютер пытается загрузить ее (страницу) много и много раз, чем создает нагрузку на сервер в виде множественных запросов. А так как возможности любого сервера не безграничны, то от переизбытка «чувств» запросов он может перестать работать.
Зависнет сервер или нет зависит от технических характеристик и настроек самого сервера, сайта и используемой CMS. В этой статье я опишу как правильно настроить вэб-сервер Apache2 чтобы даже самый скромный сервер VDS с 512 МБ памяти справлялся с большим количеством запросов, в том числе вызванных клавишей F5.

Подготовка к настройке сервера

Определим какой модуль MPM использует Apache2. Для CentOS это выглядит так:

# httpd -V | grep MPM

Получаем ответ:

 
Server MPM:     Prefork
 -D APACHE_MPM_DIR="server/mpm/prefork"

Отлично, у нас Server MPM: Prefork

Настройка Apache, что бы не было проблем с жором памяти

В CentOS надо отредактировать файл /etc/httpd/conf/httpd.conf.
Который по-умолчанию может иметь следующее содержание:


    StartServers          8
    MinSpareServers       5
    MaxSpareServers      20
    ServerLimit         256
    MaxClients          200
    MaxRequestsPerChild 4000

Краткое описание параметров модуля Apache MPM Prefork

StartServers — число дочерних процессов, создаваемых при запуске сервера.
MinSpareServers — минимальное число неиспользуемых (запасных) дочерних процессов сервера, ожидающих потенциальные запросы.
MaxSpareServers — максимальное число запасных процессов, ожидающих потенциальные запросы. Если это число будет превышено, лишние процессы будут убиты.
MaxClients — самый важный параметр модуля MPM prefork, устанавливает верхний предел количества одновременно активных процессов. Именно от него зависит потребление памяти. Его значение перекрывает значение предыдущих параметров.
ServerLimit обычно равен MaxClients.
MaxRequestsPerChild — как часто сервер перерабатывает процессы, убивая старые и начиная (запуская) новые. Полезен при утечках памяти Apache и его библиотек.
KeepAlive — обеспечивает долгоживущие сессии HTTP, позволяющие отправлять несколько запросов через одно и то же соединение. Полезно включить, если страницы содержат много изображений. Но если используете NGINX как проксисервер, то оставьте значение OFF.

Читайте также:  Оптимизация производительности Apache на CentOS 7

Самый важный параметр = MaxClients, он как раз и говорит о количестве одновременных процессов вебсервера Apache.

Как узнать значение MaxClients

Определить его значение не сложно. Расчет значения приведу для сервера с размером оперативной памяти 512 МБ. Решаем, что отдаем для ресурсов Apache 50% оперативной памяти, то есть в нашем случае 256 МБ.
Определяем сколько памяти отжирает один процесс:

# ps -ylC httpd | awk '{x += $8;y += 1} END {print "Average Proccess Size (MB): "x/((y-1)*1024)}'

Получаем следующие значения:

 
Average Proccess Size (MB): 21.5185

Получается, что в среднем один процесс Apache потребляет 21 МБ. Соответственно в отведенном объеме 256 МБ мы можем запустить 12 процессов.
Исправим файл конфигурации под новое значение:


    StartServers          3
    MinSpareServers       3
    MaxSpareServers       9
    ServerLimit         256
    MaxClients           12
    MaxRequestsPerChild 3000

Остальные параметры поправил исходя из рекомендаций в интернете для сервера с ОЗУ 512 МБ.
После внесения изменений в файл конфигурации не забудьте перезагрузить Appache:

# service httpd restart

Благодарности

При написании статьи были использованы следующие источники:

  1. https://talk.pr-cy.ru/topic/12001-guide-kak-bystro-nastroit-vps-v-kachestve-web-servera/
  2. http://www.o-nix.com/pages/reshenija-dlja-xostinga/apache-mpm.php
  3. http://blog.amet13.name/2014/06/apache2.html
  4. http://www.xela.ru/2009/03/nastrojka-httpdconf-na-vps-pod-unix-apache/

Обсуждение: 5 комментариев

  1. Максим:

    А как перегрузить апач с ISPmanager?

    Ответить
    1. Максим, в зависимости от используемой операционной системы команды могут быть разными. Для CentOS пример написан в статье: «service httpd restart». Так же это можно сделать из самой панели управления ISPmanager. Например в версии 4 ISPmanager в меню «Инструменты->Сервисы» выбираете HTTP и нажимаете кнопку [Перезапуск].

      Ответить
      1. Максим:

        У меня ISPmanager Lite 5.51 Там Инструменты->Службы->httpd. А я изначально хотел через командную строку Инструменты->Выполнить команду, а там надо задавать полностью путь к службе иначе не прокатывает

        Ответить
  2. Беслан:

    Добрый день!
    Хотел внести данные рекомендации, но в своем /etc/httpd/conf/httpd.conf такого не обнаружил, т.е. этих значений там нет.
    CentOS 7.1 64bit. Панель Vesta.

    Хотя у меня
    Average Proccess Size (MB): 9.97266

    Ответить
    1. Беслан, в CentOS 7, чтобы настроить параметры использования ресурсов Apache добавьте недостающий код (приведенный ниже) в файл httpd.conf:

      KeepAlive Off
      <IfModule prefork.c>
          StartServers        2
          MinSpareServers     6
          MaxSpareServers     12
          MaxClients          15
          MaxRequestsPerChild 3000
      </IfModule>
      

      Эти параметры также могут быть добавлены в виде отдельного файла, в директории /etc/httpd/conf.d Файл должен иметь расширение .conf
      Не забудьте перезагрузить Apache

      # apachectl restart
      Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" я даю свое согласие на обработку введенной мной персональной информации в соответствии с Федеральным Законом от 27.07.2006 №152-ФЗ "О персональных данных", на условиях и для целей определенных политикой конфиденциальности.

Технический блог © 2017
SQL - 70 | 0,426 сек. | 11.38 МБ
Политика конфиденциальности