Как оптимизировать Apache на CentOS 7
Apache – это мощный и способный веб-сервер с открытым исходным кодом, разработанный для обеспечения баланса гибкости, мобильности и производительности. Оптимизация Apache – важная задача для каждого системного администратора.
Вы можете улучшить производительность Apache, настроив конфигурацию Apache, не добавляя дополнительное оборудование, такое как RAM, CPU и т. Д.
В этом посте описываются различные параметры конфигурации Apache, которые можно использовать для повышения производительности Apache без добавления дополнительных аппаратных ресурсов в вашу систему.
Требования
- Сервер под управлением CentOS 7 или Centos 7 + Vesta CP
- Apache установлен и работает или Vestacp установлен с Apache / Apache + nginx
MaxKeepAliveRequests
MaxKeepAliveRequests – это максимальное количество запросов для обслуживания по TCP-соединению. Это ограничивает количество запросов, разрешенных для одного соединения. Если установлено значение 0, неограниченные запросы будут разрешены. Вы можете установить любое значение по вашему желанию.
Сохраняйте для этого параметра высокое значение для максимальной производительности сервера. Рекомендуемое значение MaxKeepAliveRequests – 500.
Чтобы изменить этот параметр, отредактируйте файл конфигурации Apache:
sudo nano /etc/httpd/conf/httpd.conf
Добавьте следующую строку:
MaxKeepAliveRequests 500
Сохраните и закройте файл, когда вы закончите.
KeepAliveTimeout
KeepAliveTimeout определяет количество секунд, в течение которых Apache будет ожидать новый запрос от подключенных клиентов, прежде чем закрывать соединение. (Как только сервер получает запрос, вместо него применяется директива Timeout.)
По умолчанию Keepalive отключено в CentOS 7. Если Keepalive включен, рекомендуется установить значение KeepAliveTimeout на низкое значение.
Рекомендуемое значение KeepAliveTimeout может составлять от 1 до 5.
Вы можете сделать это, отредактировав файл конфигурации Apache:
sudo nano /etc/httpd/conf/httpd.conf
Добавьте следующую строку:
KeepAliveTimeout 5
Сохраните и закройте файл,
KeepAlive
KeepAlive устанавливает, разрешает ли сервер более одного запроса на одно соединение. Он может быть использован для предотвращения использования одним клиентом слишком большого количества ресурсов сервера.
По умолчанию KeepAlive отключен в CentOS 7. Как только сервер Apache получает запросы от сотен и тысяч IP-адресов одновременно, этот параметр должен быть включен.
Вы можете включить этот параметр, отредактировав файл конфигурации Apache:
sudo nano /etc/httpd/conf/httpd.conf
Добавьте следующую строку:
KeepAlive On
Сохраните и закройте файл
Настройка MPM Prefork
Одной из причин низкой производительности Apache является то, что Apache испытывает проблемы с нагрузкой. Apache MPM (Multi-Processing Module) может помочь.
mpm_prefork_module включен в установку Apache по умолчанию в CentOS 7. Для подтверждения выполните следующую команду:
sudo apachectl -t -D DUMP_MODULES |grep mpm
Вы должны увидеть mpm_prefork_module (shared), если mod_deflate установлен и включен.
Вы можете улучшить производительность Apache, используя модуль prefork Apache MPM. Для этого установите следующие параметры в вашем файле конфигурации Apache:
sudo nano /etc/httpd/conf/httpd.conf
Добавьте следующие строки:
KeepAlive Off
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 3000
</IfModule>
Сохраните и закройте файл, затем перезапустите Apache.
sudo apachectl restart
Пояснения
StartServers : эта директива устанавливает количество дочерних серверных процессов, созданных при запуске. Рекомендуется увеличить это число на сервере с высокой нагрузкой, чтобы сервер был готов обрабатывать множество соединений.
MinSpareServers : эта директива устанавливает минимальное количество незанятых дочерних процессов сервера. Это значение нужно будет настроить для серверов с высокой нагрузкой.
MaxSpareServers : эта директива устанавливает максимальное количество незанятых дочерних процессов сервера. Если число незанятых дочерних процессов сервера больше, чем определено MaxSpareServers, незанятый процесс будет уничтожен.
MaxClients : эта директива устанавливает максимальное количество одновременных запросов, которые обработает Apache. Когда этот предел будет достигнут, любые другие попытки подключения будут поставлены в очередь.
Number of MaxClients = (Общая память RAM – память RAM, используемая для другого процесса, кроме процесса Apache) / (Память, используемая одним процессом Apache)
MaxRequestsPerChild : эта директива устанавливает, сколько запросов обработает дочерний процесс перед завершением. Как только предел будет достигнут, дочерний процесс умрет.
Примечание. Если это значение равно 0, процесс никогда не прекратится.
AllowOverride
Если для AllowOverride установлено значение «All», то Apache будет пытаться открыть файл .htaccess в каждом каталоге, который он посещает.
Например:
DocumentRoot /vaw/www/html/website1
<Directory />
AllowOverride All
</Directory>
Если запрос сделан для URI /index.html, то Apache попытается открыть файл .htaccess в /, /var/, /var/www/, /var/www/html/ and /var/www/html/website1/
Поэтому рекомендуется добавить AllowOverride all только для определенного каталога:
DocumentRoot /vaw/www/html/example
<Directory /var/wwww/html/example/admin>
AllowOverride All
</Directory>
DNS-поиск
Основной причиной замедления работы веб-сервера Apache является время, необходимое для поиска DNS. Apache запишет полное имя хоста каждого входящего клиентского соединения в свой файл access.log. Решение каждого из них съедает значительную часть времени.
Опция HostnameLookups включает поиск DNS, так что имена хостов могут регистрироваться вместо IP-адреса. По умолчанию HostnameLookups отключен в Apache.
Вы можете убедиться в этом, отредактировав файл конфигурации Apache:
sudo nano /etc/httpd/conf/httpd.conf
HostnameLookups Off
Сохраните и закройте файл, затем перезапустите Apache, чтобы отразить изменения.
sudo apachectl restart
Вывод
Настроить Apache для максимальной производительности очень просто. Вы можете экспериментировать с различными доступными параметрами и измерять производительность веб-сервера с помощью таких инструментов, как ab и httperf.