Nginx vs Apache производительность и методы оптимизации

Ссылочный блог

Существует два самых популярных веб-сервера ౼ Nginx и Apache. Оба они предоставляют мощные инструменты для хостинга веб-сайтов, но имеют различия в производительности и методах оптимизации.​

1.​ Производительность

Apache ─ это мощный и гибкий веб-сервер, который может обрабатывать большое количество запросов, особенно при использовании модуля MPM (Multi-Processing Module).​ Однако, Apache имеет высокое потребление памяти и обрабатывает каждый запрос в отдельном процессе или потоке, что может приводить к перегрузкам при высоких нагрузках.​

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

2. Методы оптимизации

а) Подключение модулей

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

Nginx, с другой стороны, использует меньше модулей и функций по умолчанию.​ Однако, благодаря своей асинхронной модели, Nginx обрабатывает запросы быстрее и обеспечивает более высокую производительность для статических файлов.​

б) Кэширование

Apache и Nginx оба поддерживают кэширование, что помогает улучшить производительность.​ Кэширование позволяет сохранять статические версии страниц или ресурсов в памяти или на диске для более быстрого доступа.​ В обоих случаях требуется настройка конфигурационных файлов и настройка времени хранения кэша.​

в) Балансировка нагрузки

Apache и Nginx также могут использоваться в качестве балансировщиков нагрузки, распределяющих трафик между несколькими серверами.​ Это помогает распределить нагрузку и повысить отказоустойчивость.​ Оба веб-сервера предоставляют инструменты для настройки балансировщика нагрузки и конфигурации бекенд-серверов.​

г) Сжатие

Apache и Nginx могут сжимать данные перед отправкой клиенту, чтобы уменьшить объем передаваемых данных.​ Это особенно полезно для медленных соединений или мобильных устройств.​ Для включения сжатия требуется настройка конфигурации сервера и проверка соответствующих модулей.​

ЧИТАТЬ ЕЩЁ:  SEO СЕО что это такое зачем нужна оптимизация

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

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

Apache был выпущен в 1995 году и, согласно Википедии, «сыграл решающую роль в развитии Всемирной паутины». Сегодня он остается наиболее часто используемым серверным программным обеспечением. Однако тенденция такова, что доля Apache на рынке уменьшается, а доля Nginx увеличивается.

Nginx был выпущен в 2004 году. Первоначально его использовали в качестве добавки к апачу. Однако его популярность неуклонно растет.

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

Эта гибкость пока недоступна в Nginx. Из руководства по настройке NGINX для HTTP/2 ясно, что его модули формируются во время создания.

Еще одна особенность, обеспечившая Apache доминирование на рынке веб-серверов, — это файл .htaccess. Он позволяет увидеть конфигурацию сервера на уровне каталога. Каждый листинг на сервере, предоставляемый Apache, может иметь свой собственный файл .htaccess.

Nginx не только не имеет эквивалентного решения, но и мешает работе приложений из-за снижения производительности.

Доля рынка различных серверов, 1995-2005 гг.

Litespeed можно сравнить с Apache. Однако проблем с производительностью нет.

Как и Apache, он поддерживает .htaccess, mod_security и mod_rewrite. Litespeed разработан как замена Apache. Он работает на CPANEL и PLESK и поддерживает HTTP/2 с 2015 года.

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

Вопросы аппаратного обеспечения

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

ЧИТАТЬ ЕЩЁ:  Браузер сообщает, что сайт ненадёжный – о чем это говорит

Мониторинг

HTOP — это эффективный способ мониторинга текущей производительности стека сервера.

Другие инструменты мониторинга включают новый реликт — NetData. Последнее решение позволяет отправлять оповещения в системные приложения или процессы, такие как электронная почта, Slack, Pushbullet, Telegram и Twilio.

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

Тестирование системы

AB (Apache Benchmark) — это простой инструмент контроля нагрузки Apache Foundation. Еще одним инструментом тестирования является Siege. Существует еще один инструмент на базе Python — Locust.

После установки Locust вам необходимо создать файл Locust в списке, в котором вы хотите запустить свое приложение.

Затем запустите инструмент из командной строки.

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

Настройка Apache

Раздел Apache MPM

В первые дни Apache создавал новый процесс для каждого входящего TCP-соединения и ответа. Если появлялись другие соединения, создавались другие процессы для их обработки.

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

Он известен как mpm_prefork_module. Эта функция требует минимальной настройки. Значение, установленное директивой MaxRequestworkers, должно быть достаточно большим, чтобы обработать столько приложений, сколько ожидается получить. Но достаточно мала, чтобы обеспечить необходимый объем физической памяти для всех процессов.

Тесты Locust показывают создание огромного количества процессов Apache для управления входящим движением.

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

В версии 2 Apache были применены два других MPM, которые пытались решить проблемы, связанные с функцией pre-fault. Это рабочая секция (MPM_Worker_Module) и секция событий.

Раздел Worker реализует гибридную функциональность для рабочих на основе потоков процесса. Согласно официальному сайту Apache:.

ЧИТАТЬ ЕЩЁ:  TikTok- интересные факты о сети. Как здесь зарабатывают.

Процесс управления родителями отвечает за инициирование процессов. Каждый из них создает фиксированное количество потоков, задаваемое дочерней инструкцией thread spur. То же самое относится к потокам, которые перенаправляются в поток сервера для прослушивания соединений и их обработки по прибытии.

Эта функция позволяет более эффективно использовать ресурсы.

В версии 2.4 Apache появился раздел Events. Он добавляет отдельный поток слушателя, который обрабатывает неактивные соединения после завершения HTTP-запроса. Это асинхронная функция, которая не блокирует и не потребляет память.

Тестовая установка WooCommerce с 1200 записями на виртуальном сервере была загружена и протестирована на Apache 2.4 в стандартном режиме, Prefork и Mod_Php.

Попробовал сначала с libapache2-mod-php7 и mpm_prefork_module по адресу https://tools.pingdom.com:.

MPM-модули Apache - 2

Далее мы попробовали раздел событий MPM. Multiverse необходимо было добавить в /etc/apt/sources.list.

Затем я запустил sudo apt-get update и установил libapache2-mod-fastcgiphp-fpm.

PHP-FPM является отдельной службой от Apache и поэтому требует перезапуска.

Далее была отключена секция pre-fault и активированы режим событий и proxy_fcgi.

Далее в виртуальный хост Apache был добавлен следующий фрагмент кода

Указанный порт должен соответствовать настройкам PHP-FPM в /etc/php/7.0/fpm/pool.d/www.conf. Более подробную информацию о конфигурации PHP-FPM смотрите здесь.

Далее настройте mpm_event /etc/apache2/mods-abailable/mpm_event.conf. Для получения дополнительной информации о каждом веб-сайте Apache и

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

Затем сервер был перезапущен с помощью команды Sudo Service Apache2 restart. Тест pingdom показывает, что время загрузки страниц сократилось вдвое.

Другие советы по настройке Apache

отключить .htaccess: Этот файл позволяет создавать настройки параметров для каждого отдельного каталога в корне сервера без перезагрузки. Поэтому обход всех каталогов и поиск файлов .htaccess в каждом приложении приведет к низкой производительности.

Выдержка из документации Apache:.

Файлы .htaccess следует использовать только в том случае, если у вас нет доступа к основным конфигурационным файлам сервера. Дополнительные параметры конфигурации .htaccess также могут быть созданы в модуле в основном файле конфигурации сервера.

Решением является отключение этого файла в файле /etc/apache2/apache2.conf.

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

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