Оба формата Nginx и Apache являются зрелыми продуктами с богатым набором функций и высокой производительностью. Они имеют общее происхождение с открытым исходным кодом, и вы можете развернуть их как на серверах Windows, так и на серверах Linux.
Однако некоторые ключевые различия могут заставить вас отдать предпочтение одному варианту.
Например, Apache — это комплексное решение, которое поддерживает множество различных технологий и модулей «из коробки». В отличие от этого, Nginx полагается на сторонние модули для расширения своей функциональности.
Чтобы понять, какой веб-сервер лучше всего подойдет для ваших нужд, давайте подробнее рассмотрим эти варианты.
Обзор
Apache, оригинальный веб-сервер Hero
Создан в 1995 году Роберт МакКул и первоначально назывался «Apache «Проект HTTP-сервера» (отсюда и название), Apache был разработан для создания надежного сервера коммерческого класса, который можно использовать бесплатно, даже с модификациями. Он стал популярным очень быстро, поскольку мог работать на многих различных операционных системах, от Unix до Windows.
Из-за этой долговременной популярности я считаю, Apache как веб-сервер «оригинального героя». Он надежный, хорошо документированный и поддерживается открытым сообществом разработчиков под эгидой Apache Фонд программного обеспечения.
Nginx, титан новой эры
Nginx (произносится как «Engine X») — это HTTP и обратный прокси-сервер, почтовый прокси-сервер и универсальный TCP/UDP-прокси-сервер, используемый для хостинга веб-сайтов и приложений всех размеров. Впервые был публично выпущен российским разработчиком Игорь СысоевПервоначальной целью Nginx было решить проблему C10K, которая Apache с трудом справлялся.
В 2019 году Nginx стал частью F5 Networks. F5 — технологическая компания, специализирующаяся на безопасности приложений, управлении несколькими облаками и предотвращении онлайн-мошенничества.
Рыночные доли и особенности
Доли рынка
Ключевые отличия
| Особенности | Nginx | Apache |
|---|---|---|
| Введенный | 2004 | 1995 |
| Текущая стабильная версия | Нгинкс 1.27.0 | Apache 2.4.63 |
| Архитектура | Событийный | Процесс-управляемый |
| Open Source | Да | Да |
| Разработка и поддержка | Apache Основание | F5 Сети |
| Поддерживаемые платформы | В первую очередь Unix | Unix и Windows |
| Несколько одновременных запросов | Да | Нет |
| Собственная динамическая обработка контента | Нет | Да |
| модульная | Да | Да |
| Конфигурация | Ограниченный | по каталогу через .htaccess |
| Запросить интерпретацию | Пропускает URI | Пропускает Расположение файловой системы |
Основная архитектура
Nginx и Apache В их базовой архитектуре есть некоторые сходства. Например, они оба используют процессы master-worker для повышения производительности. У них даже похожие файлы конфигурации. Однако различия в архитектурном стиле приводят к значительным различиям в производительности в широком смысле.
Nginx имеет ресурсосберегающую событийную архитектуру, которая использует небольшие, но постоянные объемы памяти под нагрузкой. Эта характеристика делает его идеальным для хостинга веб-сайтов с высоким уровнем трафика или тех, которые имеют периодические всплески трафика.
ApacheАрхитектура, основанная на процессах, обрабатывает каждое соединение через выделенный поток, что требует больше памяти. Однако она лучше масштабируется при высоких нагрузках на машинах с большим количеством ядер ЦП и оперативной памяти.
Использование памяти
Nginx известен своей высокой производительностью и низким потреблением ресурсов. С другой стороны, Apache может быть интенсивным в плане памяти, особенно при запуске нескольких серверных блоков. Хотя оба используют память для обработки HTTP-запросов, Nginx более легковесен.
Конструкция Apache означало, что он порождал один поток на соединение, и каждый поток использовал определенный объем оперативной памяти. По мере увеличения трафика это могло привести к проблемам, поскольку требовалось больше оперативной памяти, особенно на серверах с меньшим объемом памяти. Apache также создает новые процессы для каждого запроса, даже от одного и того же пользователя.
Для сравнения, Nginx использует один процесс для обработки нескольких подключений одновременно.
PHP Управляемость
Поскольку оба эти веб-сервера в основном работают с PHP, то, как они обрабатывают код, означает значительный потенциал производительности. Nginx не выполняет PHP напрямую по умолчанию. Вместо этого он передает запрос PHP-ФПМ (FastCGI Process Manager), который обрабатывает запрос и отправляет ответ обратно в Nginx, который затем возвращает контент клиенту.
Так как Nginx не ждет ответа от PHP-FPM для обслуживания другого запроса (аналогично тому, как он не ждет ответа от клиентов при обслуживании статического контента), Nginx может обрабатывать больше запросов одновременно, чем Apache сможет управлять.
Apache использует модуль mod_php для выполнения PHP код. В этой модели каждый раз, когда приходит HTTP-запрос, Apache порождает новый процесс или поток (в зависимости от того, как он настроен) для обработки этого запроса. Этот процесс также отвечает за обработку любого PHP запросы в рамках этого запроса.
Эта модель работает, но у нее есть некоторые недостатки. Во-первых, создание нового процесса для каждого запроса может быть интенсивным для системы, особенно если есть много одновременных запросов. Создание нового процесса для каждого PHP запрос внутри запроса еще более трудоемок, поскольку операционной системе приходится создавать новый интерпретатор для каждого запроса.
Тест производительности
В подробный отчет о сравнительном тестировании производительности от CyberPanel, несколько ключевых тестов подчеркивают различия между Nginx и Apache. Посмотрите следующее видео для полного процесса тестирования.
В итоге:
- Nginx: Обрабатывает до 10,000 2.5 одновременных подключений с низким потреблением памяти. В тестах производительности он обслуживает статический контент до XNUMX раз быстрее, чем Apache.
- Apache: Для сравнения, Apache эффективен, но менее эффективен, чем Nginx для статического контента. Благодаря своей архитектуре, основанной на процессах, ApacheПроизводительность может снизиться при высоком уровне параллелизма из-за накладных расходов на управление несколькими процессами.
Nginx против Apache для WordPress
В контексте WordPress производительность, Nginx значительно сокращает время загрузки, особенно для статического контента, что делает его предпочтительным выбором для сайтов с высоким трафиком WordPress сайтов. Его событийно-управляемая архитектура позволяет эффективно обрабатывать одновременные соединения, что приводит к сокращению времени отклика и снижению нагрузки на сервер.
Apache, с другой стороны, предлагает надежную динамическую обработку контента с помощью таких модулей, как mod_php, что может упростить развертывание для WordPress сайты, которые в значительной степени полагаются на динамический контент. Однако Nginx, как правило, обеспечивает лучшую производительность и эффективность использования ресурсов для WordPress среды, ориентированные на доставку статического контента.
Как выбрать между Nginx и Apache
Как вы можете видеть, среди этих веб-серверов-гигантов нет явного победителя. Это в основном зависит от того, что вам нужно, чтобы веб-сервер управлял.
Выбирайте Apache если:
- Устаревшие системы и совместимость: Apache часто является предпочтительным выбором для систем, которые используют его в течение длительного времени из-за его давнего присутствия на рынке. Если ваша инфраструктура в значительной степени зависит от .htaccess файлы для конфигурации каждого каталога, Apache более подходит, поскольку изначально поддерживает эти файлы, обеспечивая децентрализованную настройку и гибкость в средах общего хостинга.
- Динамическая обработка контента: Если ваши приложения требуют интенсивной обработки динамического контента, например PHP, скрипты Python или Ruby, Apache может быть выгодным из-за его возможности встраивать процессоры непосредственно в свои модули. Такая настройка упрощает выполнение динамических скриптов непосредственно на сервере.
- Простота использования и документирования: ApacheШирокое распространение означает, что у него есть огромное количество документации и поддержка сообщества. Легче найти руководства, учебные пособия и поддержку для Apache- что делает его более удобным вариантом для новичков или тех, кто предпочитает большую базу знаний.
Используйте Nginx, если:
- Высокая производительность и ScalaБилити: Nginx оптимизирован для обработки большого количества одновременных подключений, что делает его идеальным для веб-сайтов с большим трафиком или приложений, которым требуется масштабируемость. Его архитектура, управляемая событиями, позволяет ему обрабатывать много подключений с низким использованием памяти, что делает его эффективным для доставки статического контента.
- Балансировка нагрузки и обратный прокси-сервер: Nginx часто используется как обратный прокси-сервер и балансировщик нагрузки, распределяя входящий трафик по нескольким внутренним серверам. Эта функция делает Nginx отличным выбором для высокодоступных установок и сред, требующих эффективного распределения нагрузки.
- Доставка статического контента: Если ваше приложение обслуживает значительный объем статического контента, такого как изображения, CSS или JavaФайлы скриптов, Nginx выделяется своей скоростью и эффективностью в обслуживании статических файлов напрямую. Его архитектура позволяет быстро доставлять статические ресурсы с минимальными накладными расходами.
- Простота конфигурации: Хотя Nginx не поддерживает .htaccess файлы, его синтаксис конфигурации прост и понятен. Эта простота может быть полезна для тех, кто хочет поддерживать чистые и простые конфигурации сервера.
Комбинированное использование
Для многих установок, используя оба Apache и Nginx вместе могут использовать сильные стороны каждого из них.
Распространенная конфигурация — размещение Nginx в качестве обратного прокси-сервера перед Apache. Это позволяет Nginx эффективно обрабатывать статический контент и одновременные соединения, в то время как Apache управляет динамической обработкой контента. Этот гибридный подход может оптимизировать производительность и использование ресурсов в сложных веб-средах.
Заключение
Если вы бежите Apache или Nginx будет зависеть от ваших потребностей и оборудования, которое вы используете. Вы можете использовать любой из вариантов для обслуживания PHP веб-сайты. Но есть еще много всего, что нужно учитывать.
Если у вас простой веб-сайт, вы можете не заметить никакой разницы между ними. Но если ваш сайт получает больше трафика и растет, вам нужно знать, как каждый сервер работает и масштабируется под нагрузкой.