Нажав клавишу 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
В CentOS надо отредактировать файл /etc/httpd/conf/httpd.conf.
Который по-умолчанию может иметь следующее содержание:
StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 200 MaxRequestsPerChild 4000
StartServers — число дочерних процессов, создаваемых при запуске сервера.
MinSpareServers — минимальное число неиспользуемых (запасных) дочерних процессов сервера, ожидающих потенциальные запросы.
MaxSpareServers — максимальное число запасных процессов, ожидающих потенциальные запросы. Если это число будет превышено, лишние процессы будут убиты.
MaxClients — самый важный параметр модуля MPM prefork, устанавливает верхний предел количества одновременно активных процессов. Именно от него зависит потребление памяти. Его значение перекрывает значение предыдущих параметров.
ServerLimit обычно равен MaxClients.
MaxRequestsPerChild — как часто сервер перерабатывает процессы, убивая старые и начиная (запуская) новые. Полезен при утечках памяти Apache и его библиотек.
KeepAlive — обеспечивает долгоживущие сессии HTTP, позволяющие отправлять несколько запросов через одно и то же соединение. Полезно включить, если страницы содержат много изображений. Но если используете NGINX как проксисервер, то оставьте значение OFF.
Самый важный параметр = MaxClients, он как раз и говорит о количестве одновременных процессов вебсервера Apache.
Определить его значение не сложно. Расчет значения приведу для сервера с размером оперативной памяти 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