Nginx против Apache: прямое сравнение и выбор

Обновлено: 2022 / Автор статьи: Тимоти Шим

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

Однако некоторые ключевые различия могут заставить вас выбрать один из них.

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

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

Apache — оригинальный веб-сервер Hero

апаш

Создан в 1995 году Роберт МакКул и первоначально называвшийся «Проект HTTP-сервера Apache» (отсюда и название), Apache был разработан для создания надежного сервера коммерческого уровня, который можно использовать бесплатно, даже с модификациями. Он очень быстро стал популярным, потому что мог работать во многих операционных системах, от Unix до Windows.

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

Nginx — титан новой эры

Nginx

Nginx (произносится как «Engine X») — это HTTP и обратный прокси-сервер, почтовый прокси-сервер и универсальный прокси-сервер TCP/UDP, используемый для размещения веб-сайтов и приложений любого размера. Он был впервые публично выпущен российским разработчиком Игорь Сысоев. Первоначальная цель Nginx состояла в том, чтобы решить проблему C10K, с которой Apache с трудом справился. 

Читайте также

Заметные различия между Nginx и Apache

Архитектура

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

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

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

Использование памяти

Nginx известен своей высокой производительностью и низким потреблением ресурсов. С другой стороны, Apache может потреблять много памяти, особенно при работе с несколькими серверными блоками. Хотя оба используют память для обработки HTTP-запросов, Nginx более легкий. 

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

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

Обработка PHP

Поскольку оба этих веб-сервера в основном работают с PHP, то, как они обрабатывают код, означает значительный потенциал производительности. По умолчанию Nginx не выполняет PHP напрямую. Вместо этого он передает запрос в PHP-FPM (FastCGI Process Manager), который обрабатывает запрос и отправляет ответ обратно в Nginx, который затем возвращает содержимое клиенту.

Поскольку Nginx не ждет ответа от PHP-FPM для обслуживания другого запроса (аналогично тому, как он не ждет ответа от клиентов при обслуживании статического контента), Nginx может одновременно обрабатывать больше запросов, чем Apache.

Apache использует модуль mod_php для выполнения PHP-кода. В этой модели каждый раз, когда приходит HTTP-запрос, Apache порождает новый процесс или поток (в зависимости от того, как он настроен) для обработки этого запроса. Этот процесс также отвечает за обработку любых запросов PHP в рамках этого запроса.

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

Как выбрать между Nginx и Apache

Как видите, среди этих гигантов веб-серверов нет явного победителя. В основном это зависит от того, что вам нужно для управления веб-сервером. 

Выбирайте Апач, если: 

  • Вы используете веб-сайт среднего или крупного масштаба, который, вероятно, со временем значительно вырастет и требует пользовательских модулей.
  • На вашем сервере включено много виртуальных хостов или модулей, и все они нужны при запуске.
  • У вас небольшой веб-сайт, и вы не хотите тратить время на изучение правильной настройки Nginx.

Используйте Nginx, если:

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

Заключительные мысли о Nginx против Apache

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

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

Читайте также

О Тимоти Шим

Тимоти Шим - писатель, редактор и технический специалист. Начиная свою карьеру в области информационных технологий, он быстро нашел свой путь в печать и с тех пор работал с международными, региональными и отечественными изданиями в средствах массовой информации, включая ComputerWorld, PC.com, Business Today и The Asian Banker. Его опыт заключается в области технологий как с точки зрения потребителя, так и с точки зрения предприятия.

Подключение: