Thank you for reading this post, don't forget to subscribe!
Apache — самый популярный Web сервер. Настройка некоторых параметров (тюнинг) может дать существенный прирост в скорости его работы.
Модули
Отключайте модули, которые Вам не нужны. Это сэкономит множество ресурсов на обработке запросов. Модули Apache обычно поставляются как плагины (DSO), поэтому их включение и отключение делается просто через конфигурационный файл.
Обычно Вам не нужно ничего, кроме таких модули:
1 2 3 4 5 6 7 8 9 10 11 12 |
mod_alias mod_authz_host mod_deflate mod_dir mod_expires mod_headers mod_mime mod_rewrite mod_log_config mod_autoindex mod_negotiation mod_setenvif |
MPM
MPM позволяет выбрать метод обработки параллельных запросов. Оптимальный вариант — Worker — поточный MPM. В нем каждый запрос обслуживается в отдельном потоке одного из дочерних процессов. Потоки — более легкие для ОС объекты, чем процессы. Следовательно, в этом случае производительность повышается.
Для включения Worker MPM, нужно открыть файл
1 |
nano /etc/sysconfig/httpd |
и убрать комментарий со строки
1 |
HTTPD=/usr/sbin/httpd.worker |
Перезапустим Apache
1 |
/etc/init.d/httpd restart |
AllowOverride и .htaccess
Директива AllowOverride включайте использование файла .htaccess. В этом случае при каждом запросе Apache будет искать этот файл в запрашиваемых директориях. Перемещайте всю конфигурацию в файлы виртуальных хостов (папка /etc/apache2/sites-enabled/ для Debian) и отключите использование htaccess:
1 |
AllowOverride None |
MaxClients
Директива MaxClients устанавливает максимальное количество параллельных запросов, которые будет обрабатывать сервер. Эту настройку нужно адаптировать с течением времени, работайте в пределах значений в 128…4096:
1 |
MaxClients 256 |
Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.
MinSpareServers, MaxSpareServers, и StartServers
Эти директивы позволяют заранее иметь в памяти созданные процессы, чтобы не приходилось этого делать во время получения запроса. Они устанавливаются только для prefork mpm.
1 |
StartServers 3 |
# При запуска Apache будет создавать 3 процесса
1 |
MinSpareServers 3 |
# Apache не будет убивать свободные процессы, если их остается менее трех
1 |
MaxSpareServers 5 |
# Максимум 5 свободных процессов, остальные будут уничтожаться
MaxRequestsPerChild
Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды созданный процесс/поток не будет завершен никогда. Этот параметр позволяет избавиться от проблем с утечкой памяти, поэтому лучше установить его:
1 |
MaxRequestsPerChild 4096 |
# После 4096 обработанных запросов процесс будет перезапущен
KeepAlive
KeepAlive запросы позволяют устанавливать постоянные соединения между клиентом и сервером. Это экономит ресурсы на отсутствии повторной установки соединений. Обязательно включайте эту опцию.
1 2 |
KeepAlive On KeepAliveTimeout 30 |
# Включаем KeepAlive и устанавливаем время ожидания перед закрытием соединения в 30 секунд
Бывают случаи, когда пользователь отправляет только один запрос. Например, download-сервер. Тогда KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не сразу, а ждет какое-то время (KeepAliveTimeout).
Сжатие
Все современные браузеры поддерживают сжатие. Включение gzip существенно уменьшит размер трафика. Это нужно делать всегда.
1 2 3 4 5 6 7 8 9 |
AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript |
Проверьте, что сжатие заработало с помощью Online Gzip checker.
DNS
Выключайте лишние запросы к DNS в Apache:
1 |
HostnameLookups Off |
# Так Apache будет записывать в лог IP адрес клиента вместо его хоста.
Всегда используйте IP адрес в директивах Allow From и Deny From, а не доменные имена.
1 2 |
Allow From 1.1.1.1 Deny From 2.2.2.2 |
Самым большим эффектом на посетителей окажет включение сжатия gzip. Часто это экономит около 70% трафика.