Многие используют apache2 в качестве веб-сервера. Однако мало кто задумывается об оптимизации его производительности, что прямо пропорционально сказывается на скорости загрузки страниц сайта, скорости обработки скриптов (в частности php), а также на росте нагрузки на ЦП и увеличении объёма используемой ОЗУ.
Таким образом, следующий мануал, должен помочь начинающим (и не только) пользователям.
Все нижеприведённые примеры использовались на Raspberry PI 3, Debian 9, Apache 2.4.38, PHP 7.3.
Итак, начнем.
Первым методом является банальное отключение модулей, которые вы не используете:
Список используемых в данный момент модулей можно посмотреть командой:
Для отключения модуля используется команда:
Соответственно для включения модуля используется команда:
Обратите внимание, что при использовании a2dismod, название модуля необходимо писать без самого слова модуль.
К примеру, если вы в выводе команды apache2ctl -M увидели proxy_module, то для его отключения необходимо использовать команду — a2dismod proxy
Наиболее загружающими систему модулями (по личному опыту) являются:
Так что в тех случаях, когда эти модули вам не нужны я рекомендую эти модули отключить.
Также, после отключения какого-либо модуля, я рекомендую использовать команду — apache2ctl configtest, которая проверит конфигурацию используемых сайтов и если какой-либо из отключенных модулей был для них необходим, выдаст ошибку.
По умолчанию, после установки, apache2 использует MPM Prefork (1 поток на 1 соединение), который заметно снижает производительность, но при этом улучшает стабильность и безопасность.
Но для оптимизации производительности я рекомендую использовать MPM Worker, который позволяет использовать сразу несколько потоков на одно соединение.
Для его включения используем следующие команды:
Однако при использовании Worker вы можете столкнуться с проблемой, т.к. модуль php7.3 зависит от модуля Prefork.
Для решения этой проблемы установим модуль php7.3-fpm, который будет использоваться для отработки php-скриптов:
Стоит заметить, что использование php-fpm также снизит объём используемой ОЗУ процессом apache2 и немного ускорит отработку php-скриптов.
Таким образом, такими простыми действиями мы смогли оптимизировать производительность и снизить нагрузку на машину (в данном случае RPI3).
Конечно же, есть сотни других вариантов оптимизации, вроде включения сжатия (что действительно полезно, но в большинстве своём уже включено по умолчанию), изменения параметров (файлов конфигурации) MPM, отключения HostnameLookups и т.д., но в данной статье я постарался отразить именно те пункты, которые больше всего помогли мне, и надеюсь, что помогут другим.
Таким образом, следующий мануал, должен помочь начинающим (и не только) пользователям.
Все нижеприведённые примеры использовались на 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 и т.д., но в данной статье я постарался отразить именно те пункты, которые больше всего помогли мне, и надеюсь, что помогут другим.
Комментарии (4)
kostin
21.03.2019 20:57+1Погодите-ка. Если в Апаче выключить mod_rewrite, cgi и mod_php, то зачем вообще Апач? Вы в одной статье перечислили сразу все причины, которые обычно удерживают людей от полного перехода на LEMP.
Vinni37
22.03.2019 08:58Взять Apache, выкинуть из него все что можно, поставить php-fpm. Зачем?
Я думал будет рассказ про тюниг конфига под конкретное железо и задачи, а так: apt-get install nginx php-fpm и поехали
nqooqoo
0. apt install nginx