Захист від f5

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

Якщо ви її натиснули і утримуєте тривалий час, то ваш комп'ютер намагається завантажити її (сторінку) багато і багато разів, чим створює навантаження на сервер у вигляді множинних запитів. А так як можливості будь-якого сервера не безмежні, то від надлишку «почуттів» запитів він може перестати працювати.
Зависне сервер чи ні залежить від технічних характеристик і налаштувань самого сервера, сайту і використовуваної CMS. У цій статті я опишу як правильно налаштувати веб-сервер Apache2 щоб навіть найскромніший сервер VDS з 512 МБ пам'яті справлявся з великою кількістю запитів, в тому числі викликаних клавішею F5.

Підготовка до налаштування сервера

Визначимо який модуль MPM використовує Apache2. Для CentOS це виглядає так:

Відмінно, у нас Server MPM: Prefork

Налаштування Apache, що б не було проблем з жором пам'яті

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

StartServers - число дочірніх процесів, створюваних при запуску сервера.
MinSpareServers - мінімальне число невикористовуваних (запасних) дочірніх процесів сервера, які очікують потенційні запити.
MaxSpareServers - максимальне число запасних процесів, які очікують потенційні запити. Якщо це число буде перевищено, зайві процеси будуть вбиті.
MaxClients - найважливіший параметр модуля MPM prefork, встановлює верхню межу кількості одночасно активних процесів. Саме від нього залежить споживання пам'яті. Його значення перекриває значення попередніх параметрів.
ServerLimit зазвичай дорівнює MaxClients.
MaxRequestsPerChild - як часто сервер переробляє процеси, вбиваючи старі і починаючи (запускаючи) нові. Корисний при витоках пам'яті Apache і його бібліотек.
KeepAlive - забезпечує довгоживучі сесії HTTP, що дозволяють відправляти кілька запитів через один і той же з'єднання. Корисно включити, якщо веб-сторінка містить багато зображень. Але якщо використовуєте NGINX як проксісервер, то залиште значення OFF.

Читайте також: Рішення проблеми Failed: initscripts.x86_64 0: 9.49.24-1.el7 на CentOS 7

Найважливіший параметр = MaxClients. він як раз і говорить про кількість одночасних процесів вебсервера Apache.

Як дізнатися значення MaxClients

Визначити його значення не складно. Розрахунок значення приведу для сервера з розміром оперативної пам'яті 512 МБ. Вирішуємо, що віддаємо для ресурсів Apache 50% оперативної пам'яті, тобто в нашому випадку 256 МБ.
Визначаємо скільки пам'яті віджирали один процес:

Отримуємо наступні значення:

Виходить, що в середньому один процес Apache споживає 21 МБ. Відповідно в відведеному обсязі 256 МБ ми можемо запустити 12 процесів.
Виправимо файл конфігурації під нове значення:

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

Подяки

При написанні статті були використані наступні джерела:

Схожі статті