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

Опубликовано: 4 мая 2015 / Обновлено: 20 сентября 2018
Раздел(ы): GNU Linux - CentOS / Debian
Просмотры: 23941
Комментарии: 6

Нажав клавишу 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.

Который по-умолчанию может иметь следующее содержание:

<IfModule mpm_prefork_module>
    StartServers          8
    MinSpareServers       5
    MaxSpareServers      20
    ServerLimit         256
    MaxClients          200
    MaxRequestsPerChild 4000
</IfModule>

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

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

Самый важный параметр = 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 процессов.

Исправим файл конфигурации под новое значение:

<IfModule mpm_prefork_module>
    StartServers          3
    MinSpareServers       3
    MaxSpareServers       9
    ServerLimit         256
    MaxClients           12
    MaxRequestsPerChild 3000
</IfModule>

Остальные параметры поправил исходя из рекомендаций в интернете для сервера с ОЗУ 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/

Обсуждение (комментарии к статье)

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

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

  1. Добрый день!
    Хотел внести данные рекомендации, но в своем /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

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

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

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных", на условиях и для целей определенных политикой конфиденциальности сайта.
© Юрий Рассадников, 2011 - 2024
uptime узнать
Домен : reg.ru
Хостинг : adman.com
SQL - 6 | 0,177 сек. | 8.31 МБ