Оптимизация 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
Способ работы с клиентскими запросами
Prefork — обрабатывает процессы как самостоятельные сущности, на поступающий запрос от основного процесса создается дочерний
Worker — обрабатывает процессы поточно, каждый запрос обслуживается в отдельном потоке с дочерним процессом
Какой MPM используется можно выяснить той же командой, которая использовалась ранее, но с другим ключем
apachectl -V | grep -i mpm
Server MPM: prefork
Переключение MPM (если Apache собран с поддержкой всех трех) выполняется за счет отключения модуля, подключения другого и перезапуска службы.
Например если нужно сменить prefork на worker:
a2dismod mpm_prefork_module
a2enmod mpm_worker.load
Перезапускаем Apache
/etc/init.d/apache2 restart
Два MPM одновременно использоваться не могут, если пробовать их включить возникнет конфликт. Для каждого можно задавать индивидуальные настройки в /etc/apache2/apache2.conf (для всех mpm в нем есть отдельная секция по умолчанию).
AllowOverride
Для увеличения производительности имеет смысл отключать использование .htaccess за счет AllowOverride
Сжатие
Сжатый контент будет отдаваться значительно быстрее за счет сокращения workload в каждом ответе сервера. Читайте о том, как включить сжатие.
Запросы к DNS
Как любая другая служба, работающая по сети Apache может обращаться к DNS чтобы разрешить доменное имя в IP адрес. Это поведение лучше отключать директивой HostnameLookups Off
В логи при этом будут писаться только IP адреса.
В нагруженных системах от Apache часо отказываются оставляя только Nginx, который тоже специально настраивается.