Оптимизация производительности 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 proxy

Наиболее загружающими систему модулями (по личному опыту) являются:

  • PHP, Ruby, Perl и прочие модули для различных скриптовых языков
  • SSL
  • Rewrite
  • 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 и т.д., но в данной статье я постарался отразить именно те пункты, которые больше всего помогли мне, и надеюсь, что помогут другим.
Поделиться публикацией

Комментарии 5

  • НЛО прилетело и опубликовало эту надпись здесь
      +3

      Погодите-ка. Если в Апаче выключить mod_rewrite, cgi и mod_php, то зачем вообще Апач? Вы в одной статье перечислили сразу все причины, которые обычно удерживают людей от полного перехода на LEMP.

        0
        в теории, может быть какая-то специфичная фигня вроде mod_kerberos, которую в nginx запустить сложнее, а в apache оно практически из коробки.
        0
        Если вы используете fpm-php то зачем вам apache?
          +2
          Взять Apache, выкинуть из него все что можно, поставить php-fpm. Зачем?
          Я думал будет рассказ про тюниг конфига под конкретное железо и задачи, а так: apt-get install nginx php-fpm и поехали

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое