NGINX vs Apache: Сравнение двух популярных веб-серверов
На сегодняшний день двумя наиболее популярными веб-серверами с открытым исходным кодом для работы в Интернете являются HTTP-сервер Apache и NGINX. Более 50% веб-сайтов в мире работают на этих двух веб-серверах. В течение почти двух десятилетий веб-сервер Apache обслуживал около 60 процентов веб-сайтов в мире, пока не появился его конкурент NGINX (произносится как «engine-x»). В связи с резким ростом объемов трафика данных и количества пользователей всемирной паутины NGINX был создан для преодоления ограничений производительности веб-серверов Apache. NGINX, разработанный для обеспечения более высокого уровня параллелизма, может быть развернут как автономный веб-сервер и как внешний прокси-сервер для Apache и других веб-серверов.
Обзор Apache
Apache был разработан для доставки веб-контента, доступ к которому осуществляется через Интернет. Он известен тем, что играл ключевую роль в начальном росте Всемирной паутины. Apache - это программное обеспечение с открытым исходным кодом, разработанное и поддерживаемое открытым сообществом разработчиков и работающее в самых разных операционных системах. Архитектура включает в себя ядро Apache и модули. Основной компонент предоставляет базовую серверную функцию, поэтому он принимает соединения и управляет параллелизмом. Различные модули соответствуют различным функциональным возможностям, которые выполняются для каждого запроса. Конкретное развертывание Apache может быть сконфигурировано для включения различных модулей, таких как функции безопасности, управление динамическим контентом или для базовой обработки HTTP-запросов.
Модель «один сервер делает все» стала ключом к успеху Apache. Однако по мере увеличения уровней трафика и увеличения количества веб-страниц работа Apache стала усложняться.
Обзор NGINX
NGINX был разработан для устранения ограничений производительности веб-серверов Apache. Производительность и масштабируемость NGINX обусловлены архитектурой управления событиями. Он значительно отличается от подхода Apache к процессу или потоку на соединение. В NGINX каждый рабочий процесс может одновременно обрабатывать тысячи HTTP соединений. Следовательно, NGINX - это легковесная, масштабируемая и высокопроизводительная альтернатива. Архитектура NGINX делает обработку больших нагрузок на данные гораздо более предсказуемой с точки зрения использования ОЗУ, использования ЦП и задержки .
NGINX также имеет богатый набор функций и может выполнять различные роли сервера :
- Обратный прокси-сервер для протоколов HTTP, HTTPS, SMTP, POP3 и IMAP
- Балансировщик нагрузки и HTTP-кеш
- Интерфейсный прокси для Apache и других веб-серверов, сочетающий гибкость Apache с хорошей производительностью статического содержимого NGINX
Apache против Nginx: сравнение наборов функций
Простота
Разрабатывать и обновлять приложения на Apache очень просто. Модель «одно соединение на процесс» позволяет очень легко вставлять модули в любой точке логики веб-обслуживания. Разработчики могут добавлять код таким образом, что в случае сбоев будет затронут только рабочий процесс, выполняющий код. Обработка всех других соединений будет продолжаться без помех.
NGINX, с другой стороны, имеет сложную архитектуру, поэтому разработка модулей не легка. Разработчики модулей NGINX должны быть очень осторожны, чтобы создавать эффективный и точный код, без каких-либо сбоев, и соответствующим образом взаимодействовать со сложным ядром, управляемым событиями, чтобы избежать блокирования операций.
Производительность
Производительность измеряется тем, как сервер доставляет большие объемы контента в браузер клиента, и это важный фактор. Контент может быть статическим или динамическим.
Давайте рассмотрим эти два понятия:
Статический контент
NGINX работает в 2,5 раза быстрее, чем Apache, согласно тесту производительности, выполняемому до 1000 одновременных подключений. Другой тест с 512 одновременными подключениями показал, что NGINX примерно в два раза быстрее и потребляет меньше памяти. Несомненно, NGINX имеет преимущество перед Apache со статическим контентом. Поэтому, если вам нужно обслуживать одновременный статический контент, NGINX является предпочтительным выбором .
Динамический контент
Результаты тестов Speedemy показали, что производительность динамического контента была одинаковой для серверов Apache и NGINX. Вероятная причина этого заключается в том, что почти все время обработки запросов тратится в среде выполнения PHP, а не в основной части веб-сервера. Среда выполнения PHP довольно похожа для обоих веб-серверов.
Apache также может обрабатывать динамический контент, встраивая процессор языка, подобного PHP, в каждый из его рабочих экземпляров. Это позволяет ему выполнять динамический контент на самом веб-сервере без необходимости полагаться на внешние компоненты. Эти динамические процессы могут быть включены с помощью динамически загружаемых модулей.
NGINX изначально не имеет возможности обрабатывать динамический контент. Для обработки PHP и других запросов на динамический контент NGINX должен перейти на внешний процессор и дождаться отправки отрендеренного контента. Однако этот метод также имеет некоторые преимущества. Поскольку динамический интерпретатор не встроен в рабочий процесс, его накладные расходы будут присутствовать только для динамического содержимого.
Поддержка ОС
Apache работает во всех операционных системах, таких как UNIX, Linux или BSD, и полностью поддерживает Microsoft Windows. NGINX также работает на нескольких современных Unix-подобных системах и поддерживает Windows, но его производительность в Windows не так стабильна, как на платформах UNIX.
Безопасность
И Apache, и NGINX являются безопасными веб-серверами. Команда безопасности Apache существует, чтобы предоставлять помощь и советы проектам Apache по вопросам безопасности и координировать обработку уязвимостей безопасности. Важно правильно настроить серверы и знать, что делает каждый параметр в настройках. Существует множество рекомендаций по обеспечению безопасности серверов для предотвращения атак безопасности.
Гибкость
Веб-серверы могут быть настроены путем добавления модулей. Apache долгое время имел динамическую загрузку модулей, поэтому все модули Apache поддерживают это.
NGINX Plus (NGINX Plus - это программный балансировщик нагрузки, веб-сервера и кэш контента, построенный на основе открытого исходного кода NGINX ) также использует модульную архитектуру. Новые функции и возможности могут быть добавлены с программными модулями, которые по требованию могут быть подключены к работающему экземпляру NGINX Plus. Динамические модули добавляют в NGINX Plus такие функции, как геолокация пользователей по IP-адресу, изменение размеров изображений и встраивание сценариев Lua в модель обработки событий NGINX Plus. Модули создаются как самой NGINX, так и сторонними разработчиками.
Большинство необходимых функциональных возможностей основного модуля (например, прокси, кэширование, распределение нагрузки) поддерживается обоими веб-серверами.
Поддержка и документация
Важным моментом, который следует учитывать, является доступная справка и поддержка веб-серверов среди прочего программного обеспечения. Поскольку Apache был долгое время популярен, поддержка сервера довольно распространена повсеместно.
Наряду с документацией многие веб-проекты содержат инструменты для начальной загрузки в среде Apache. Оно может быть включено в сами проекты или в пакеты, поддерживаемые вашим дистрибутивом.
Apache, как правило, получает большую поддержку от сторонних проектов просто из-за своей доли рынка и продолжительности его доступности.
Ngnix против Apache: Сравнение лицом к лицу
Apache
- Простота. Легко разрабатывать и внедрять новые функции благодаря своей модели «одно соединение на весь процесс»
- Производительность. Медленно в отображении статического контента, но быстрая в отображении динамического контента
- Поддержка ОС. Поддерживает все ОС - Unix, в том числе и Windows
- Гибкость. Можно настроить, добавив модули. Apache имел самую долгую динамическую загрузку модулей.
- Поддержка и документация. Отличная поддержка и документация, как это было на рынке в течение очень долгого времени.
Ngnix
- Простота. Сложный в разработке, поскольку он имеет сложную архитектуру для одновременной обработки нескольких соединений.
- Производительность. В 2,5 раза быстрее, чем Apache, и потребляет меньше памяти
- Поддержка ОС. Поддерживает все ОС - как Unix, так и Windows, однако производительность в Windows сравнительно менее стабильна.
- Гибкость. NGINX версии 1.11.5 и NGINX Plus Release R11 представили совместимость для динамических модулей.
- Поддержка и документация. В начале у NGINX была слабая поддержка, но с ростом популярности поддержка и документация стала доступной.
Совместное использование NGINX и Apache
Для многих приложений NGINX и Apache хорошо дополняют друг друга. Очень распространенным начальным шаблоном является развертывание программного обеспечения NGINX с открытым исходным кодом в качестве прокси-сервера (или NGINX Plus в качестве платформы доставки приложений) перед веб-приложением на основе Apache. NGINX выполняет тяжелую работу, связанную с HTTP - обслуживает статические файлы, кэширует содержимое и разряжает медленные HTTP-соединения - так, чтобы сервер Apache мог выполнять код приложения в безопасной и надежной среде.
Итак, что вы выберете? Apache или NGINX?
Как видно, Apache и NGINX являются мощными, гибкими и производительными веб-серверами. Последние версии обоих серверов являются конкурентоспособными во всех областях. Решение о том, какой сервер лучше подходит для вас, во многом зависит от оценки ваших конкретных требований и выбора наилучшего варианта.