Оптимізація продуктивності apache2

Багато хто використовують apache2 як веб-сервер. Однак мало хто замислюється про оптимізацію його продуктивності, що прямо пропорційно позначається на швидкості завантаження сторінок сайту, швидкості обробки скриптів (зокрема php), а також на зростанні навантаження на ЦП і збільшення обсягу ОЗУ, що використовується.

Таким чином, наступний мануал повинен допомогти початківцям (і не тільки) користувачам.
Всі наведені нижче приклади використовувалися на Raspberry PI 3, Debian 9, Apache 2.4.38, PHP 7.3.

Тож почнемо.

1. Відключення модулів, що не використовуються.

Першим методом є банальне відключення модулів, які ви не використовуєте:

Список модулів, що використовуються в даний момент, можна переглянути командою:

apache2ctl -M

Для відключення модуля використовується команда:

a2dismod *название модуля*

Відповідно для включення модуля використовується команда:

a2enmod *название модуля*

Зверніть увагу, що при використанні a2dismod, назву модуля необхідно писати без самого слова модуль.

Наприклад, якщо ви у висновку команди apache2ctl -M побачили proxy_module, то для його відключення необхідно використовувати команду a2dismod проксі

Найбільш модулями, що завантажують систему (з особистого досвіду) є:

  • PHP, Ruby, Perl та інші модулі для різних скриптових мов
  • SSL
  • Переписати
  • CGI

Так що в тих випадках, коли ці модулі вам не потрібні, я рекомендую ці модулі відключити.

Також після відключення будь-якого модуля я рекомендую використовувати команду. apache2ctl configtest, яка перевірить конфігурацію використовуваних сайтів і якщо якийсь із відключених модулів був для них необхідний, видасть помилку.

2. Зміна MPM(Multi-Processing Module) та використання php-fpm

За умовчанням, після встановлення, apache2 використовує MPM Prefork (1 потік на 1 з'єднання), який помітно знижує продуктивність, але покращує стабільність і безпеку.

Але для оптимізації продуктивності я рекомендую використовувати MPM Worker, який дозволяє використовувати відразу кілька потоків на одне з'єднання.

Для його включення використовуємо такі команди:

a2dismod mpm_prefork  //Отключаем prefork
a2dismod php7.3  //Отключаем модуль php, который зависит от prefork
a2enmod mpm_worker  //Включаем worker

Однак під час використання Worker ви можете зіткнутися із проблемою, т.к. модуль php7.3 залежить від модуля Prefork.

Для вирішення цієї проблеми встановимо модуль php7.3-fpm, який використовуватиметься для відпрацювання php-скриптів:

apt-get update && apt-get install php7.3-fpm  //Устанавливаем
systemctl enable php7.3-fpm && systemctl start php7.3-fpm  //Добавляем в автозагрузку и запускаем
a2enmod php7.3-fpm && a2enconf php7.3-fpm.conf  //Включаем модуль и конфиг для него

Варто зауважити, що використання php-fpm також знизить обсяг ОЗУ, що використовується процесом apache2 і трохи прискорить відпрацювання php-скриптів.

3. висновок

Таким чином, такими простими діями ми змогли оптимізувати продуктивність та знизити навантаження на машину (в даному випадку RPI3).

Звичайно ж, є сотні інших варіантів оптимізації, на кшталт включення стиснення (що дійсно корисно, але здебільшого вже включено за замовчуванням), зміни параметрів (файлів конфігурації) MPM, відключення HostnameLookups і т.д., але в цій статті я постарався відобразити саме ті пункти, які найбільше допомогли мені, і сподіваюся, що допоможуть іншим.

Джерело: habr.com

Додати коментар або відгук