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

Linux loves

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

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

Веб-серверы могут замедляться из-за вредоносных программ, интенсивного трафика или неправильного распределения ресурсов. Существует два способа ускорить работу веб-сервера Apache:

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

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

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

Позволяет найти уязвимые места в сервере и защитить их.

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

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

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

Есть два основных шага для ускорения Apache:

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

Настройки ускорения Apache во время компиляции

Выберите установку Apache в соответствии с вашими потребностями. Помогает создать быстрый и эффективный веб-сервер.

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

Функциональность Apache реализуется путем добавления модулей. Существует два типа модулей: статические и динамические (общие).

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

Статический динамическая страница модулиключ различия

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

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

Большое количество динамических или общих модулей может замедлить работу Apache и вашего сайта. Поэтому будьте осторожны при выборе модулей.

ЧИТАТЬ ЕЩЁ:  Просмотр видео за деньги - мифы и реальность

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

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

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

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

Prefork Рабочий

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

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

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

Выберите соответствующий MPM

Страница обнаружения Ваш сервер Apache

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

Ускорение работы Apache путем внесения изменений во время выполнения программы

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

Поиск DNS

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

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

Установить AllowOverride

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

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

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

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

ЧИТАТЬ ЕЩЁ:  Отладка JavaScript с помощью настоящего отладчика

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

Переговоры по содержанию

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

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

Установка MaxClients

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

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

Настройки MinSpareServers, MaxSpareServers и StartServers

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

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

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

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

Установить MaxRequestsPerChild

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

Настройка KeepAlive и KeepAliveTimeout

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

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

Тайм-аут

Определяет, как долго ждать запроса от посетителя. При высоком трафике значение этого параметра должно быть не менее 120 секунд. Но лучше, чтобы это значение было как можно меньше. Это предотвращает ненужную трату ресурсов.

ЧИТАТЬ ЕЩЁ:  Онлайн-сервис Figma - все, что нужно знать разработчику

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

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

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

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

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

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

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

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

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

Модули mod_proxy и mod_rewrite используются для обработки таких перенаправленных запросов. Клиент не заметит разницы и будет думать, что все запросы обрабатываются одним и тем же сервером.

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

Настройка MySQL и PHP

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

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

Резюме

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

Оцените статью