NGINX против Apache: Как выбрать лучший веб-сервер

by Alejandro Granata
NGINX против Apache: Как выбрать лучший веб-сервер thumbnail

Представьте это: вы ищете новые кроссовки, находите хорошее предложение и решаете проверить его на сайте.

Вы ждете 10 секунд… 20 секунд… и сайт так и не загружается. Вам надоело ждать, поэтому вы переходите на другой сайт. Вот что, вероятно, произошло: сайт кроссовок, вероятно, потратил много времени и денег на эффектные изображения и стильные дизайны, но это все бесполезно, если загрузка занимает вечность.

Интернет полон медленных сайтов.

Средняя мобильная целевая страница загружается 22 секунды, и это ужасно для бизнеса.

Исследование компании Portent показало, что сайт, который загружается менее чем за одну секунду, имеет в три раза более высокий коэффициент конверсии, чем сайт, загружающийся пять секунд.

Теперь, что это имеет отношение к нашему сравнению NGINX против Apache?

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

Apache и NGINX – два из наиболее известных веб-серверов.

По состоянию на июль 2024 года, w3techs сообщает, что NGINX обеспечивает работу более чем 34% веб-сайтов, в то время как Apache поддерживает 29,4%.

Делает ли это NGINX явным победителем? Пока что нет.

Веб-серверы работают по-разному для различных сценариев использования. В этом руководстве мы рассмотрим различия между Apache и NGINX и объясним, на что стоит обратить внимание при выборе сервера.

Начнем.

Что такое веб-серверы?

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

Когда вы вводите URL-адрес, например, «google.com», ваш браузер отправляет запрос на веб-сервер, который хранит файлы, необходимые для работы веб-сайта.

Инфографика, объясняющая, что такое веб-серверы, с иконками веб-браузера, интернета и веб-сервера, две соединяющие их линии.

Затем сервер отправляет обратно соответствующий контент, будь то HTML, CSS, JavaScript, изображения или другой тип.

Веб-серверы выполняют много важных задач в фоновом режиме:

  • Управление HTTP-соединениями и запросами
  • Маршрутизация запросов к нужному backend-приложению при необходимости (например, PHP, Python или Ruby on Rails)
  • Чтение и запись файлов с диска для предоставления статических ресурсов
  • Применение политик безопасности
  • Сжатие контента для более быстрой передачи
  • Журналирование запросов для анализа

Теперь, когда мы рассмотрели, как работают веб-серверы, давайте посмотрим, как NGINX и Apache подходят к этим задачам.

Что такое Apache?

Глоссарий DreamHost

Apache

Apache HTTP Server — это бесплатное программное обеспечение для веб-сервера с открытым исходным кодом, которое связывает серверы и браузеры через HTTP-запросы.

Читать далее

Apache HTTP Server, обычно называемый Apache, это популярное программное обеспечение для веб-сервера с открытым исходным кодом, созданное Робертом МакКулом и выпущенное в 1995 году. Оно основано на сервере NCSA HTTPd.

Фонд Apache Software Foundation, некоммерческая организация, поддерживающая проекты с открытым исходным кодом, разработала и продолжает поддерживать его.

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

Некоторые основные особенности и преимущества Apache:

  • Модульная архитектура: Ее функциональность может быть расширена за счет модулей для различных функций и языков.
  • Работает на различных операционных системах: Apache создан быть мультиплатформенным для размещения вашего веб-сервера на любой операционной системе, включая Linux, Windows и macOS.
  • Обширная документация и большое сообщество: Помогает пользователям и разработчикам решать проблемы и разрабатывать лучшие решения, работая вместе.
  • Гибкая конфигурация: Файлы .htaccess могут облегчить изменения конфигурации, специфичные для каталога, для пользователей.
  • Функции безопасности: Apache обладает довольно хорошей безопасностью благодаря своей открытой природе и регулярным обновлениям для устранения уязвимостей и ошибок.

Тем не менее, у Apache есть несколько ограничений:

  • Большее использование памяти: Использует больше памяти, чем NGINX, особенно при обработке нескольких одновременных соединений.
  • Медленнее при больших нагрузках: Может быть медленнее NGINX при обслуживании статических файлов, особенно при больших нагрузках.
  • Сложнее для разработчиков в разработке и поддержке: Со временем растущая сложность кодовой базы сделала его более сложным для создания и поддержания.

Что такое NGINX?

NGINX (произносится как «Engine X») — это бесплатное программное обеспечение для веб-сервера с открытым исходным кодом, впервые выпущенное в 2004 году. Его создал Игорь Сысоев, российский программный инженер, чтобы решить проблему одновременного доступа множества пользователей к веб-сайту, что было сложностью для других веб-серверов, таких как Apache.

Работа Сысоева над NGINX началась в 2002 году. Он стремился решить проблему “C10k” — обработку 10 000 одновременных соединений.

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

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

Глоссарий DreamHost

Веб-приложение

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

Читать далее

Некоторые из основных преимуществ NGINX:

  • Параллельная обработка: NGINX одновременно обрабатывает множество пользователей, не требуя избыточной памяти или мощности процессора.
  • Простота настройки и конфигурации: NGINX имеет простой и интуитивно понятный формат файла конфигурации, который помогает пользователям легко настроить веб-сервер в соответствии с их задачами.
  • Разнообразные функции для повышения производительности: NGINX обладает множеством встроенных функций для балансировки нагрузки, кэширования и защиты веб-сайтов с помощью шифрования SSL/TLS.
  • Поддержка IMAP и POP3: NGINX также функционирует как почтовый прокси-сервер, поддерживая протоколы, такие как IMAP и POP3.

Однако, существует несколько недостатков использования NGINX:

  • Настройки по умолчанию не оптимальны: Алгоритмы балансировки нагрузки по умолчанию могут не всегда оптимально работать в каждой ситуации.
  • Отсутствие встроенных компиляторов языков: Отсутствует встроенная поддержка создания динамических сайтов на серверных языках, таких как PHP или Python. Тем не менее, вы можете обойти это с помощью стороннего расширения.

Apache против NGINX: В чем различия?

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

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

Итак, что отличает их друг от друга?

Давайте рассмотрим это поподробнее.

ДеталиApache HTTP ServerNGINX
Основан19952004
Условия лицензированияЛицензия Apache 2.0Лицензия BSD на 2 пункта
Совместимость с операционными системамиWindows, Linux, macOS, системы на базе UnixWindows, Linux, macOS, системы на базе Unix
Поддержка протокола WebSocketДаДа (введена в версии 1.3.13)
Поддержка обратного проксиДаДа
Конфигурация виртуальных хостовПоддерживаетсяПоддерживается
Кэширование Доступно через модулиВстроено в ядро
Расход ресурсов (память)ВысокийНизкий
Формат настройки и конфигурацииТекстовыйТекстовый (более простой синтаксис)
Функции безопасностиПоддержка mod_security предлагает гибкую конфигурацию правил и контроль доступаРасширенная фильтрация, ограничение скорости, встроенная поддержка мер по смягчению последствий DDoS и производительность SSL/TLS
Защищенная коммуникация (SSL/TLS)ПоддерживаетсяПоддерживается
Обработка одновременных подключенийХорошаяВысокоэффективная
Масштабируемость производительностиХорошаяОтличная
Функциональность распределения нагрузкиДостижимо с помощью модулейВстроенная функция
Общая производительность и скоростьУдовлетворительнаяВ два раза быстрее, чем Apache

Архитектура и параллелизм

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

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

Процессорная архитектура Apache

Диаграмма, показывающая процесс-ориентированный подход Apache: запрос клиента, обработка сервером, ответ и обработка файла index.php.

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

Эти процессы или потоки управляются модулями многопроцессорной обработки (MPMs):

  • Prefork MPM: Оригинальная модель Apache. Каждый процесс имеет один поток и обрабатывает одно соединение за раз. Это просто, но может быть ресурсоемким.
  • Worker MPM: Использует несколько потоков на процесс, каждый обрабатывает одно соединение. Это лучше, чем prefork с точки зрения памяти, но при интенсивном трафике и ресурсоемких запросах может возникнуть узкое место в CPU, что приведет к проблемам с производительностью.
  • Event MPM: Похож на Worker MPM, но оптимизирован для соединений keep-alive (устройства, которые не могут быть отключены от сервера). Тем не менее, он все еще не полностью асинхронен.

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

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

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

Все эти отдельные процессы не очень эффективны. Даже с использованием event MPM, Apache не может полностью избавиться от модели одного потока на соединение.

Получайте контент прямо в свой почтовый ящик

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

Событийно-ориентированная архитектура NGINX

Событийно-ориентированная архитектура NGINX

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

Вот как это работает: 

  • NGINX имеет основной процесс (обычно один на каждое ядро процессора), который управляет несколькими рабочими процессами. Каждый рабочий может обрабатывать тысячи одновременных соединений. Нет необходимости заставлять рабочих запускать новые потоки или направлять каждый запрос в отдельный процесс.
  • Вместо этого рабочие имеют цикл событий, где они эффективно отслеживают новые события в существующих соединениях с помощью механизмов операционной системы, таких как kqueue или epoll. Это позволяет им обрабатывать множество соединений в одном потоке. Когда происходит событие, например, поступает новый запрос или сервер бэкенда отвечает, NGINX быстро перенаправляет его в свободный слот рабочего.
  • Это намного эффективнее, чем модель Apache. NGINX может обслуживать огромное количество запросов с минимальным использованием памяти. Он масштабируется невероятно хорошо, поэтому его используют для многих самых загруженных сайтов в Интернете.

Недостаток заключается в том, что NGINX не может внедрять интерпретаторы кода, как это делает Apache.

Итак, когда вы хотите выполнить код PHP или Python, NGINX отправляет запросы к отдельному менеджеру процессов FastCGI, такому как php-fpm. Этот процесс выполняет код и преобразует его в формат, понятный браузеру пользователя.

С другой стороны, Apache может выполнять языки, такие как PHP, Perl и Python, в рамках своих процессов.

Поскольку NGINX не может, файл конфигурации может стать немного сложнее.

Однако преимущества в производительности обычно перевешивают неудобства.

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

NGINX известен высокой производительностью при обслуживании статических файлов, таких как HTML-страницы, изображения, CSS и JavaScript.

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

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

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

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

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

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

Бонус: это также может помочь вам улучшить ваши основные веб-виталы, давая вам небольшое преимущество в Google.

Глоссарий DreamHost

Core Web Vitals (CWV)

Core Web Vitals (CWV), разработанные Google, улучшают веб-серфинг с помощью трех показателей: Largest Contentful Paint (LCP), First Input Delay (FID) и Cumulative Layout Shift (CLS).

Читать далее

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

Но если вам нужен производительный веб-сервер прямо из коробки, то NGINX — это то, что вам нужно.

Конфигурация и синтаксис

NGINX и Apache имеют различные философии конфигурации.

Apache известен своими обширными возможностями конфигурации. Помимо apache2.conf, вы должны добавить свои правила и конфигурации в файл .htaccess .

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

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

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

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

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

Конфигурация NGINX, с другой стороны, направлена на простоту и удобочитаемость. Здесь нет файла .htaccess. Вы просто настраиваете сайты в вашем файле NGINX.conf вместе с папкой sites-enabled, и все готово к работе.

Синтаксис заимствует стили из распространенных языков программирования. Он все еще мощный, но не такой обширный, как Apache.

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

Вместо модулей, NGINX имеет меньший набор основных директив и функций, которые уже встроены. Все ваши параметры для данной функции обычно находятся в одном блоке вместе (заключены в фигурные скобки { }).

Некоторые продвинутые функции, такие как балансировка нагрузки и кэширование, настраиваются в основном файле NGINX.conf, а не разделяются на отдельные файлы.

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

Безопасность

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

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

Вот несколько ключевых моментов, которые следует учитывать:

  • Модульность: Модульная архитектура Apache означает, что вам нужно активировать только используемые функции, что минимизирует поверхность атаки. В NGINX многие стандартные функции встроены непосредственно в ядро, что, как утверждают некоторые, делает его менее гибким с точки зрения безопасности.
  • Фильтрация запросов: NGINX обладает мощным встроенным механизмом фильтрации запросов, который может помочь блокировать распространенные веб-атаки, такие как SQL-инъекции и межсайтовые сценарии (XSS). Apache имеет аналогичные возможности благодаря модулям, таким как mod_security.
  • Настройка SSL/TLS: Оба сервера поддерживают SSL/TLS для зашифрованных соединений, но говорят, что NGINX проще настраивать. У него более понятная документация и более безопасные настройки «из коробки».
  • Изоляция процессов: Использование NGINX одного мастер-процесса с несколькими рабочими процессами может помочь изолировать проблемные области. Prefork и worker MPM в Apache могут обеспечить аналогичную изоляцию на уровне процессов, но за счет использования большего количества ресурсов.
  • Смягчение DDoS-атак: Событийно-ориентированная архитектура NGINX и эффективное управление одновременными соединениями делают его популярным выбором для смягчения DDoS-атак небольшого и среднего размера. Несколько дополнительных модулей и настройка также могут сделать Apache устойчивым к DDoS-атакам.

Динамическое содержимое, модули и экосистема

Apache давно стал основным выбором для предоставления динамического содержимого, поскольку он легко интегрирует серверные языки. С помощью MPM prefork и worker вы можете встроить поддержку языков, таких как PHP, Python и Perl, прямо в бинарный файл Apache.

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

NGINX не имеет встроенной поддержки серверных языков. Для работы с PHP, Python или Ruby on Rails вам понадобится отдельный сервис, такой как php-fpm, который запускает интерпретатор языка. NGINX получает запросы и перенаправляет их на backend, который обрабатывает код и возвращает ответ.

Это требует немного больше работы для настройки, чем универсальный подход Apache. С другой стороны, это соответствует философии NGINX делать одно дело (обработку запросов) — и делать это хорошо.

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

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

Если вам нужна какая-то очень специфическая функциональность, Apache может иметь преимущество здесь.

Тем не менее, набор функций NGINX достаточен для большинства общих потребностей веб-сервера.

Реальное использование, производительность и сообщество

Популярность NGINX выросла за последнее десятилетие.

Доля рынка NGINX против Apache. По состоянию на 2022 год, NGINX используется более чем на 34% всех веб-сайтов в мире, в то время как доля Apache составляет примерно 29%.

По состоянию на 2022 год, оно поддерживает более 34% всех сайтов в мире, в сравнении с примерно 29% у Apache.

Одно, что вам следует помнить: вы не заметите разницы между этими веб-серверами, если у вас не большой сайт или очень маленький сервер.

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

NGINX может быть лучше, если вы стремитесь к максимальной одновременности или создаете огромный сайт. Его архитектура немного более перспективна и рассчитана на масштабирование. К тому же, сообщество NGINX быстро растет. Документация также на высоте; вы можете найти множество руководств и поддержки.

Apache против NGINX: Какой из них подходит вам?

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

NGINX лучше, если:

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

Apache лучше, если:

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

Нет правила, которое говорит, что вы должны выбрать только один.

Использование NGINX перед Apache в качестве обратного прокси очень распространено. Это позволяет вам сочетать непревзойденную работу NGINX с обслуживанием статических файлов и одновременную обработку с богатой поддержкой динамических языков на backend от Apache — лучшее из обоих миров.

Заключение

Apache и NGINX оба отличные, поэтому выбор зависит в основном от того, что лучше соответствует вашим потребностям.

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

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

Если вам нужен сервер для экспериментов, попробуйте управляемый VPS от DreamHost. С VPS вы можете выбрать, какое программное обеспечение установить, как сервер будет реагировать на запросы и многое другое. К тому же, благодаря гибкости VPS, вы можете разместить несколько веб-сайтов на одном сервере и соответственно распределить ресурсы между ними.

Кроме того, все тарифные планы DreamPress теперь включают NGINX.

Единственный способ найти идеальную конфигурацию – это экспериментировать. Запустите VPS, установите NGINX и Apache, и посмотрите, что лучше подойдет для вас!

VPS Hosting
VPS Хостинг

Мы знаем, что у вас есть много вариантов VPS

Вот чем выделяется предложение VPS от DreamHost: круглосуточная клиентская поддержка, интуитивно понятная панель, масштабируемая RAM, неограниченная пропускная способность, неограниченное количество доменов для хостинга и SSD хранилище.

Изменить ваш VPS план