Как настроить сервер Apache на максимальную производительность

В наши дни все ждут от веб-сайтов молниеносной скорости загрузки. В данной статье мы рассмотрим лучшие способы оптимизации сервера Apache.

Что замедляет сервер?

Работа веб-серверов может замедляться из-за вредоносных программ, больших объемов трафика или из-за неправильного распределения ресурсов. Есть два пути ускорения работы веб-сервера Apache:

Круглосуточный мониторинг производительности и экстренные исправления.

Отслеживание производительности, завершение процесса-нарушителя и установление лимитов выделенных ресурсов, чтобы в будущем предотвратить возникновение подобных проблем.

Периодический аудит производительности и параметр Apache.

Может найти уязвимости сервера и защитить их.

Как ускорить работу Apache?

Изменить производительность Apache таким образом, чтобы она соответствовала объемам получаемого трафика. Таким образом можно добиться 50% ускорения работы.

5 шагов для ускорения работы Apache

Ускорить работу Apache можно без труда на двух основных стадиях:

  • Во время компиляции – параметра при установке сервера.
  • Во время выполнения — установка настроек, влияющих на сервер во время его работы.

1. Параметра для ускорения Apache во время компиляции

Необходимо выбирать вариант установки Apache, исходя из требований. Это поможет создать быстрый и эффективный веб-сервер.

а. Загружайте только нужные модули

В Apache функциональность реализуется путем добавления модулей. Они бывают двух типов: статические и динамические(общие).

Чтобы посмотреть список модулей, поддерживаемых сервером, используйте команду apachectl -M. Статические модули компилируются в бинарные файлы httpd, а динамические загружаются непосредственно во время выполнения.

Статические и динамические модули : ключевые различия

Статические модули Динамические модули
Компилируются в бинарные файлы Добавляются во время выполнения
Требуют перекомпиляции кода Перекомпиляция не требуется
Быстро загружаются Замедляют веб-сервер

Чем больше статических модулей в бинарных файлах, тем быстрее работает веб-сервер. Но они требуют перекомпиляции Apache каждый раз, когда необходимо что-то настроить. Из-за этого динамические модули или DSO используются чаще, так как они могут быть скомпилированы отдельно и загружены во время выполнения.

Но большое число динамических или общих модулей может замедлить работу сервера Apache и веб-сайта. Так что при выборе модулей требуется соблюдать осторожность.

Чтобы увеличить скорость работы и производительность, используйте минимальное число динамических модулей, так как они уменьшают объем доступной памяти.

b. Выберите правильный MPM

В Apache используются MPM(мульти-процессинговые модули), которые обрабатывают запросы, приходящие на сервер. Они прослушивают сетевые порты сервера, принимая запросы и создавая дочерние процессы.

MPM бывают двух типов: Prefork и Worker. В MPM Prefork каждый процесс httpd обрабатывает один сетевой запрос. Это более безопасно по сравнению с MPM Worker, но требует большего числа памяти и ресурсов.

MPM Prefork и Worker

MPM Prefork MPM Worker
Один поток Пару потоков
Использует больше ресурсов Использует меньше памяти
Отказоустойчив Справляется с большим трафиком

При использовании MPM Worker Apache работает в режиме многопоточного сервера, где каждый отвечает за запрос. Этот вариант подходит для обработки большего трафика при ограниченных мощностях сервера.

По умолчанию большинство установок Apache используют модуль Prefork. Он применяется для обработки больших объемов трафика. Вы можете легко проверить, какой модуль MPM использует сервер с помощью следующей команды:

Как изменить сервер Apache на максимальную производительность

Определение типа MPM на веб—сервере Apache

В Apache 2.4 появилась поддержка э MPM модуля Event, который может обрабатывать множественные запросы внутри одного потока. Так что он работает даже быстрее, чем модуль Worker.

2. Ускорение работы Apache изменениями во время выполнения

Чтобы повысить производительность сервера, необходимо регулярно измерять производительность и осуществлять тонкую настройку конфигурации. Наиболее важные настройки, которые необходимо оптимизировать:

a. Поиск DNS

Apache может тратить время на определение хоста каждого IP, с которого приходит запрос. Это замедляет обработку запроса, а также приводит к пустой трате ресурсов. Чтобы избежать этого, необходимо отключить опцию HostnameLookups.

При параметру директив Allow from или Deny from используйте IP-адреса вместо доменных имён. Иначе будет осуществляться двойной поиск имени DNS, который уменьшит производительность сервера.

b. Параметр AllowOverride

Если задана опция AllowOverride, то Apache попытается открыть файл.htaccess в каждой папке, которую он посещает. Данные дополнительные запросы к файловой системе увеличивают время отправки ответа с сервера.

Так что лучше отключить эту опцию. Если переопределение параметров в файлах.htaccess надо в определённой папке, необходимо разрешить это только для данного каталога.

c. Параметра FollowSymLinks и SymLinksIfOwnerMatch

Параметр Apache FollowSymLinks сообщает серверу, что необходимо проверять символические ссылки и проходить по ним. Если она имеет в себя значение Off, Apache придётся выполнять дополнительные проверки, что замедлит его работу.

Если установлена директива SymLinksIfOwnerMatch, сервер будет проходить по символическим ссылкам, только если владелец целевого файла тот же, что и владелец ссылки. Это также влияет на скорость работы Apache.

Лучше всего активировать директиву FollowSymLinks и выключить директиву ‘SymLinksIfOwnerMatch’. Но это может привести к проблемам с безопасностью, так что окончательное решение остается за вами.

d. Согласование содержимого(Content Negotiation)

Согласование содержимого может покупателям выбирать формат данных, получаемых от сервера. Рекомендуется избегать согласования содержимого для быстрого ответа.

Если согласование содержимого надо для веб-сайта, можно без проблем снизить задержки, используя файлы type-map вместо директивы Options MultiViews. Ее применение увеличивает задержку.

e. Параметр MaxClients

Параметр MaxClients устанавливает лимит числа одновременных запросов, которое может поддерживаться Apache. Если это значение слишком мало, запросы станут в очередь, и не будут обрабатываться.

Большое значение параметры может загрузить оперативную память и повлиять на скорость ответов Apache. Надо выбрать оптимально значение исходя из объёма доступной памяти и ресурсов, потребляемых процессом.

f. Параметра MinSpareServers, MaxSpareServers и StartServers

MaxSpareServers и MinSpareServers определяют число дочерних процессов, которые будут находиться в состоянии ожидания обработки запросов. Данные настройки важны, так как создание дочернего процесса отнимает ресурсы.

Если значение MinSpareServers слишком низкое, и на сервер поступает одновременно пару запросов, Apache создаст дополнительные дочерние процессы. Это снижает функция быстрого ответа на запрос покупателя.

Значение MaxSpareServers не должно быть слишком большим. Поскольку стоящие в очереди на обработку дочерние процессы потребляют лишние серверные мощности. Необходимо установить данные значения в оптимальном диапазоне, чтобы сбалансировать использование ресурсов и производительность.

Директива StartServers устанавливает число дочерних серверных процессов, которые создаются при старте сервера. Если запросов много, а Apache часто перезагружается, необходимо установить относительно большое значение.

g. Параметр MaxRequestsPerChild

Директива MaxRequestsPerChild устанавливает лимит числа запросов, которое будет обрабатывать каждый дочерний процесс. Слишком малое значения может привести к перегрузке сервера при создании новых процессов. Так что необходимо установить это значение в диапазоне нескольких тысяч, чтобы ускорить работу Apache.

h. Параметр KeepAlive и KeepAliveTimeout

KeepAlive используется для поддержки единого соединения для передачи данных веб-страницы. Благодаря чему не тратится время на создание нового подключения для каждого файла.

KeepAliveTimeout определяет время ожидания следующего запроса. Если значение большое, дочерние процессы могут расходовать ресурсы, ожидая следующего запроса. Оптимальное значение – 2-5 секунд для небольших объемов трафика и 10 секунд для высоконагруженных серверов.

i. Timeout

Устанавливает время ожидания запроса от пользователя. При больших объемах трафика значение параметры должно быть не менее 120 секунд. Но лучше держать это значение минимальным. Это может предотвратить излишнее расходование ресурсов.

3. Сжатие и кэширование HTTP

Сжатие HTTP применяется для ускорения работы серверов Apache. Сервер применяет к телу ответа шифрование gzip или deflate перед тем, как отправить его покупателю. Далее покупатель распаковывает полученные данные. Данные сжимаются только если браузер запрашивает сжатие. Сжатие HTTP включается в Apache при помощи модуля ‘mod_deflate’.

При кэшировании копия данных сохраняется на стороне покупателе или прокси-сервере, так что их не необходимо приобретать прямо с сервера. Кэширование часто используемых файлов помогает снизить нагрузку на сервер и ускорить обработку запросов.

Модули mod_expires и mod_headers для параметра кэша через HTTP- заголовки, присылаемые с сервера. При помощи директив cache-control можно без проблем управлять правилами кэширования, чтобы ускорить работу Apache.

Также можно легко использовать кэширование на стороне сервера, когда часто запрашиваемый содержимое хранится в памяти. Для параметра данного типа кэширования используется модуль mod_cache.

4. Различные серверы для статического и динамического контента

Процессы Apache, которые управляют динамическим содержимым, потребляют от 3 до 20 Мб памяти. Статический контент требуют всего лишь 1Мб памяти. Процесс, управляющий динамическим контентом, при следующем запросе может предоставлять статический содержимое.

Что приводит к расходам памяти и замедлению работы сервера. Так что рекомендуется разделить серверы на управляющие статическим контентом и динамическим содержимым.

К примеру, можно без труда использовать небольшой Apache в виде frontend-сервера, предоставляющего статический контент. Запросы на динамический контент будут перенаправляться к иному серверу Apache со всеми необходимыми модулями.

Для подобного перенаправления запросов используются модули mod_proxy и mod_rewrite. Покупатель не заметит разницы, и будет считать, что все запросы выполняются одним сервером.

Используя два сервера, можно легко ускорить работу Apache, выдавая статический содержимое быстрее и выделяя большее число памяти для обработки динамического контента.

5. Тонкая параметр MySQL и PHP

Не менее важно оптимизировать сервер баз данных, чтобы избежать задержек в его работе. Также надо улучшить производительность PHP-страниц, используя механизм кэширования, такой как Zend OPcache.

Сервер MySQL оптимизируется путем параметра фрагментации таблиц, максимального числа подключений, размеров буфера, кэша запросов, пула и т.п.

Заключение

Параметр производительности Apache – нелёгкое дело. Так что важно иметь чёткое понимание технических требований веб-сервера и принципа его работы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *