Оптимизация Apache — настройка веб-сервера, которая требуется для того, чтобы он обслуживал приложение максимально точно соответствуя требованиям к его работе. При высоких нагрузках специальным образом настроив Apache можно добиться максимально быстрой отдачи им контента пользователю.
Ниже приведены основные приемы оптимизации Apache, которые могут положительно сказаться на рабочих характеристиках веб-сервера.
Оптимизация Apache: способы и приемы
Отключение неиспользуемых модулей
Apache имеет очень богатый функционал и позволяет добиваться различных конфигураций. Функционал подключается за счет модулей.
Посмотреть их список можно так:
apache2ctl -M
Loaded Modules:
core_module (static)
so_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
…
php5_module (shared)
rewrite_module (shared)
setenvif_module (shared)
socache_shmcb_module (shared)
ssl_module (shared)
status_module (shared)
Каждый модуль дает какие-то возможности, но предполагает затрату ресурсов и уменьшение скорости обработки запроса. С нужными модулями Apache может быть скомпилирован сразу, тогда уменьшения производительности не происходит.
Прочитав документацию по модулям стоит определиться какие из них нужны, остальные отключить.
MPM – Multi-Processing Module
mpm определяет способ работы с клиентскими запросами. Создание процесса под каджый запрос или обработку поступающих процессов запущенными заранее воркерами.
Prefork — обрабатывает процессы как самостоятельные сущности, на поступающий запрос от основного процесса создается дочерний
Worker — обрабатывает процессы поточно, каждый запрос обслуживается в отдельном потоке с дочерним процессом
Какой MPM используется можно выяснить той же командой, которая использовалась ранее, но с другим ключем
apachectl -V | grep -i mpm
Server MPM: prefork
Переключение MPM (если Apache собран с поддержкой всех трех) выполняется за счет отключения модуля, подключения другого и перезапуска службы.
Например если нужно сменить prefork на worker:
a2dismod mpm_prefork_module
a2enmod mpm_worker.load
Таким же образом можно сменить mpm на event и проверить результат.
Пример вывода представлен на скриншоте:
Подробно про mpm можно почитать в документации. В зависимости от выбранного mpm будут отрабатывать настройки для mpm в конфигурации.
Для каждой опции есть свой файл с настройками. В Ubuntu/Debian файлы находятся в /etc/apache2/mods-available/. Для mpm_prefork, например, полный путь к файлу /etc/apache2/mods-available/mpm_prefork.conf. Можно использовать файлы или задавать индивидуальные настройки в /etc/apache2/apache2.conf.
mpm_prefork даёт самую большую скорость работы, worker даёт большую производительность.
Перезапускаем Apache
/etc/init.d/apache2 restart
Два MPM одновременно использоваться не могут, если пробовать их включить возникнет конфликт.
AllowOverride
Для увеличения производительности имеет смысл отключать использование .htaccess за счет AllowOverride. Подробно про директиву.
Сжатие
Сжатый контент будет отдаваться значительно быстрее за счет сокращения workload в каждом ответе сервера. Читайте о том, как включить сжатие.
Запросы к DNS
Как любая другая служба, работающая по сети Apache может обращаться к DNS чтобы разрешить доменное имя в IP адрес. Это поведение лучше отключать директивой HostnameLookups Off
В логи при этом будут писаться только IP адреса.
В нагруженных системах от Apache часо отказываются оставляя только Nginx, который тоже специально настраивается.