Время на прочтение
12 мин
Количество просмотров 346K
Введение
Apache и Nginx — 2 самых широко распространенных веб-сервера с открытым исходным кодом в мире. Вместе они обслуживают более 50% трафика во всем интернете. Оба решения способны работать с разнообразными рабочими нагрузками и взаимодействовать с другими приложениями для реализации полного веб-стека.
Несмотря на то, что у Apache и Nginx много схожих качеств, их нельзя рассматривать как полностью взаимозаменямые решения. Каждый из них имеет собственные преимущества и важно понимать какой веб-сервер выбрать в какой ситуации. В этой статье описано то, как каждый из этих веб-серверов ведет себя при различных условиях.
Общий обзор
Прежде чем погрузиться в различия между Apache и Nginx давайте бегло взглянем на предысторию каждого из этих проектов.
Apache
Apache HTTP Server был разработан Робертом Маккулом в 1995 году, а с 1999 года разрабатывается под управлением Apache Software Foundation — фонда развития программного обеспечения Apache. Так как HTTP сервер это первый и самый популярный проект фонда его обычно называют просто Apache.
Веб-север Apache был самым популярным веб-сервером в интернете с 1996 года. Благодаря его популярности у Apache сильная документация и интеграция со сторонним софтом.
Администраторы часто выбирают Apache из-за его гибкости, мощности и широкой распространенности. Он может быть расширен с помощью системы динамически загружаемых модулей и исполнять программы на большом количестве интерпретируемых языков программирования без использования внешнего программного обеспечения.
Nginx
В 2002 году Игорь Сысоев начал работу над Nginx для того чтобы решить проблему C10K — требование к ПО работать с 10 тысячами одновременных соединений. Первый публичный релиз был выпущен в 2004 году, поставленная цель была достигнута благодаря асинхронной event-driven архитектуре.
Nginx начал набирать популярность с момента релиза благодаря своей легковесности (light-weight resource utilization) и возможности легко масштабироваться на минимальном железе. Nginx превосходен при отдаче статического контента и спроектирован так, чтобы передавать динамические запросы другому ПО предназначенному для их обработки.
Администраторы часто выбирают Nginx из-за его эффективного потребления ресурсов и отзывчивости под нагрузкой, а также из-за возможности использовать его и как веб-сервер, и как прокси.
Архитектура обработки соединений
Одно из самых существенных отличий между Apache и Nginx состоит в том как они обрабатывают соединения и отвечают на различные виды трафика.
Apache
Apache предоставляет несколько модулей мультипроцессинга (multi-processing modules, MPM), которые отвечают за то как запрос клиента будет обработан. Это позволет администраторам определять политику обработки соединений. Ниже представлен список MPM-модулей Apache:
- mpm_prefork — этот модуль создает по одному процессу с одним потоком на каждый запрос. Каждый процесс может обрабатывать только одно соединение в один момент времени. Пока число запросов меньше числа процессов этот MPM работает очень быстро. Однако производительность быстро падает когда число запросов начинает превосходить число процессов, поэтому в большинстве случаев это не самый лучший выбор. Каждый процесс потребляет значительный объем RAM, поэтому этот MPM сложно поддается масштабированию. Но он может быть использован вместе с компонентами, которые не созданы для работы в многопоточной среде. Например, PHP не является потокобезопасным, поэтому этот MPM рекомендуется использовать как безопасный метод работы с
mod_php
. - mpm_worker — этот модуль создает процессы, каждый из которых может управлять несколькими потоками. Каждый поток может обрабтывать одно соединение. Потоки значительно более эффективны чем процессы, что означает что mpm_worker масштабируется значительно лучше чем mpm_prefork. Так как потоков больше чем процессов это означает, что новое соединение может быть сразу обработано свободным потоком, а не ждать пока освободится процесс.
- mpm_event — этот модуль похож на mpm_worker, но оптимизрован под работу с keep-alive соединениями. Когда используется mpm_worker соединение будет удерживать поток вне зависимости от того активное это соединение или keep-alive. Mpm_event выделяет отдельные потоки для keep-alive соединений и отдельные потоки для активных соединений. Это позволяет модулю не погрязнуть в keep-alive соединениях, что необходимо для быстрой работы. Этот модуль был отмечен как стабильный в Apache версии 2.4.
Как вы можете видеть Apache предлагает гибкие возможности для выбора различных алгоритмов обработки соединений и запросов.
Nginx
Nginx появился на сцене позднее Apache, по этой причине, его разработчик был лучше осведомлен о проблемах конкурентности, с которыми сталкиваются сайты при масштабировании. Благодаря этим знаниям Nginx изначально был спроектирован на базе асинхронных неблокирующих event-driven алгоритмов.
Nginx создает процессы-воркеры каждый из которых может обслуживать тысячи соединений. Воркеры достигают такого результата благодаря механизму основанному на быстром цикле, в котором проверяются и обрабатываются события. Отделение основной работы от обработки соединений позволяет каждому воркеру заниматься своей работой и отвлекаться на обработку соединений только тогда когда произошло новое событие.
Каждое соединение, обрабатываемое воркером, помещается в event loop вместе с другими соединениями. В этом цикле события обрабатываются асинхронно, позволяя обрабатывать задачи в неблокирующей манере. Когда соединение закрывается оно удаляется из цикла.
Этот подход к обработке соединений позволяет Nginx’у невероятно масштабироваться при ограниченных ресурсах. Поскольку сервер однопоточный и он не создает процессы под каждое соединение, использование памяти и CPU относительно равномерно, даже при высоких нагрузках.
Статический и динамический контент
Если рассматривать жизненные примеры, то основные различия между Apache и Nginx в том как они обрабатывают запросы к статическому и динамическому контенту.
Apache
Apache может раздавать статический контент используя стандартные file-based методы. Производительность таких операций зависит от выбранного MPM.
Apache также может раздавать динамический контент встраивая интерпретатор нужного языка в каждого воркера. Это позволяет обрабатывать запросы к динамическому содержимому средствами самого веб-сервера и не полагаться на внешние компоненты. Интерпретаторы языков могут быть подключены к Apache с помощью динамически загружаемых модулей.
Возможность обрабатывать динамический контент средствами самого Apache упрощает конфигурирование. Нет необходимости настраивать взаимодействие с дополнительным софтом, динамический модуль может быть легко отключен в случае изменившихся требований.
Nginx
Nginx не имеет возможности самостоятельно обрабатывать запросы к динамическому контенту. Для обработки запросов к PHP или другому динамическому контенту Nginx должен передать запрос внешнему процессору для исполнения, подождать пока ответ будет сгенерирован и получить его. Затем результат может быть отправлен клиенту.
Для администраторов это означает, что нужно настроить взаимодействие Nginx с таким процессором используя один из протоколов, который известен Nginx’у (http, FastCGI, SCGI, uWSGI, memcache). Это может немного усложнить процесс настройки, в особенности когда вы будете пытаться предугадать какое число соединений разрешить, так как будет использоваться дополнительное соединение с процессором на каждый пользовательский запрос.
Однако, этот метод имеет и свои преимущества. Так как интерпретатор не встроен в каждого воркера, то оверхед, связанный с этим, будет иметь место только при запросах к динамическому контенту. Статический контент будет возвращен клиенту простым способом и запросы к интерпретатору будут выполняться только тогда когда они нужны. Apache тоже может работать в такой манере, но тогда это лишит его всех преимуществ описанных в предыдущем разделе.
Распределенная конфигурация против централизованной
Для администраторов одним из очевидных отличий этих двух веб-серверов является наличие у Apache возможности задавать конфигурацию на уровне директории.
Apache
Apache имеет опцию, которая позволяет включить конфигурирование на уровне директорий. Если эта опция включена, то Apache будет искать конфигурационные директивы в директориях с контентом в специальных скрытых файлах, которые называются .htaccess
.
Так как такие конфигурационные файлы находятся в директриях с контентом, Apache вынужден при обработке каждого запроса проверять не содержит ли каждый компонент запрашиваемого пути файл .htaccess
и исполнять директивы в найденных файлах. Это позволяет децентрализовать конфигурирование веб-сервера, что позволяет реализовать на уровне директорий модификацию URL’ов (URL rewrite), ограничения доступа, авторизацию и аутентификацию и даже политики кеширования.
Несмотря на то, что все описанное выше может быть настроено и в основном конфигурационном файле Apache, файлы .htaccess
имеют ряд преимуществ. Во-первых, эти файлы интерпретируются как только они найдены по запрашиваемому пути, что позволяет менять конфигурацию на лету не перезагружая веб-сервер. Во вторых, это позволяет дать возможность непривилегированным пользователям контролировать определынные аспекты собственных веб-приложений с помощью .htaccess
.
Это дает простой способ таким приложениям как системы управления контентом (CMS) конфигурировать собственное окружение не имея доступа к конфигурационному файлу веб-сервера. Это также может быть использовано шаред хостингами, чтобы сохранить контроль над основным конфигурационным файлом и дать клиентам контроль над конфигурацией определенных директорий.
Nginx
Nginx не интерпретирует файлы .htaccess
и не предоставляет механизм конфигурирования на уровне директорий за пределами основного конфигурационного файла. Этот подход может показаться менее гибким чем в случае с Apache, но он имеет свои преимущства.
Основное преимущество перед использованием .htaccess
— это улучшенная производительность. Типичная установка Apache позволяет использовать файлы .htaccess
в любой директории, поэтому веб-сервер при каждом запросе вынужден проверять наличие этого файла во всех родительских директориях запрошенного файла. Если найден один или более таких файлов, то все они должны быть прочитаны и интерпретированы.
Так как Nginx не позволяет переопределять конфиги на уровне директорий, он может обрабатывать запросы быстрее, ведь ему достаточно сделать один directory lookup и прочитать один конфигурационный файл на каждый запрос (предполагается, что файл найден там где он должен быть по соглашению).
Второе преимущество связано с безопасностью. Распределенная конфигурация на уровне директорий в Apache возлагает ответственность за безопасность на обычных пользователей, которые вряд ли способны решить эту задачу качественно. То что администратор контролирует весь сервер предотвращает ошибки безопасности, которые могут возникнуть если дать пользователям доступ к конфигурации.
Имейте ввиду, что вы можете отключить поддержку .htaccess
в Apache, если сказанное выше произвело на вас впечатление.
Интерпретация базирующаяся на файлах и URI
То как веб-сервер интерпретирует запрос и сопоставляет его с ресурсом в системе это еще одна отличительная особенность в этих двух серверах.
Apache
Apache имеет возможность интерпретировать запрос как физический ресурс в файловой системе или как URI, который требует дополнительной обработки. Первый тип запросов использует конфигурационные блоки <Directory>
или <File>
, второй — блоки <Location>
.
Так как Apache изначально был спроектирован как веб-сервер, он по умолчанию интерпретирует запросы как ресурсы в файловой системе. Он берет document root веб-сервера и дополняет его частью запроса, которая следует за именем хоста и номером порта, чтобы найти запрашиваемый файл. В общем случае, иерархия файловой системы представленная в вебе доступна как дерево документов.
Apache предоставляет ряд альтернатив на случай когда запрос не соответствует файлу в файловой системе. Использование блоков <Location>
это метод работы с URI без отображения на файловую систему. Также возможно использовать регулярные выражения, которые позволяют задать более гибкие настройки для всей файловой системы.
Так как Apache может оперировать и c файловой системой, и с webspace, то он в основном опирается на методы работы с файловой системой. Это видно в некоторых решениях в дизайне архитектуры веб-сервера, например, в использовании файлов .htaccess
для конфигурирования на уровне директорий. Документация к Apache не рекомендует использовать URI-блоки для ограничения доступа для запросов к файловой системе.
Nginx
Nginx создан, чтобы работать и в качестве веб-сервера, и в качестве прокси-сервера. По этой причине он работает в первую очередь с URI, транслируя их при необходимости в запросы к файловой системе.
Эта особенность прослеживается в том как для Nginx конструируются и интерпретируются конфигурационные файлы. В Nginx нет способа создать конфигурацию для заданной директории, вместо этого он парсит URI.
Например, основными конфигурационными блоками в Nginx являются <server>
и <location>
. В блоке <server>
определяется хост, который будет обслуживаться, блок <location>
отвечает за обработку части URI, которая идет после имени хоста и номера порта. Таким образом, запрос интерпретируется как URI, а не как путь в файловой системе.
В случае запросов к статическим файлам все запросы должны быть отображены (mapped) на путь в файловой системе. Сначала Nginx выбирает блоки server и location, которые будут использованы для обработки запроса и затем объединяет document root с URI, в соответствии с конфигурацией.
Эти подходы (интерпретация запроса как пути в файловой системе и как URI) могут показаться похожими, но тот факт что Nginx рассматривает запросы как URI, а не как пути в файловой системе позволяет ему легче справляться одновременно и с ролью веб-сервера, и с ролью прокси. Nginx конфигурируется так, чтобы отвечать на различные шаблоны запросов. Nginx не обращается к файловой системе до тех пор пока он не готов обслужить запрос, что объясняет почему он не реализует ничего похожего на файлы .htaccess
.
Модули
И Apache, и Nginx могут быть расширены при помощи системы модулей, но способы реализации модульной системы принципиально отличаются.
Apache
Система модулей Apache позволяет динамически загружать и выгружать модули, чтобы удовлетворить ваши потребности, в то время как ваш сервер запущен. Ядро Apache всегда доступно, в то время как модули можно включать и выключать, чтобы добавить или удалить функциональность из основного сервера.
Apache использует эту функциональность для решения широкого круга задач. Благодаря зрелости платформы существует огромное множество модулей, которые могут изменять ключевые особенности сервера, например модуль mod_php
позволяет включать PHP-интерпретатор в кажого воркера.
Использование модулей не ограничивается лишь обработкой динамических запросов. Среди других возможностей модулей: изменение URL’ов (URL rewrite), аутентификация клиентов, защита сервера, логгирование, кеширование, сжатие, проксирование, ограничение частоты запросов, шифрование. Динамические модули могут значительно расширить функцональность ядра.
Nginx
Nginx тоже имеет систему модулей, но она сильно отличается от подхода используемого в Apache. В Nginx модули загружаются не динамически, а должны быть выбраны и скомпилированы с ядром сервера.
Для многих пользователей по этой причине Nginx кажется менее гибким. Это особенно относится к пользователям, кто имеет мало опыта ручной сборки приложений и предпочитают использовать системы управления пакетами. Обычно разработчики дистрибутивов стремятся создать пакеты для всех часто используемых модулей, но если вам нужен какой-то нестандартный модуль вам придется собрать его из исходников самостоятельно.
Тем не менее, модули в Nginx очень полезны и востребованы, вы можете определить чего вы хотите от сервера и включить только те модули, что вам нужны. Некоторые пользователи считают такой подход более безопасным так как произвольные модули не могут быть подключены к серверу.
Модули Nginx реализуют те же возможности, что и модули Apache: проксирование, сжатие данных, ограничение частоты запросов, логгирование, модификация URL’ов, гео-локация, аутентификация, шифрование, потоковое вещание, почтовые функции.
Поддержка, совместимость, экосистема и документация
В процессе использования приложения важными являются экосистема созданная вокруг него и возможность получения поддержки.
Apache
Так как Apache пользуется популярностью такое длительное время с поддержкой у него нет проблем. Легко можно найти большое количество документации как от разработчиков Apache, так и от сторонних авторов. Эта документация покрывает все возможные сценарии использования Apache, включая взаимодействие с другими приложениями.
Существует много инструментов и веб-проектов идущих в комплекте со средствами запуска самих себя из под Apache. Это относится как к самим проектам, так и к системам управления пакетами.
В общем случае Apache будет иметь больше поддержки в сторонних проектах просто потому он доступен на рынке длительное время. Администраторы также обычно имеют больше опыта работы с Apache, так как большинство людей начинают работу с шаред-хостингов где Apache более популярен из-за поддержки файлов .htaccess
.
Nginx
Nginx обычно используется там, где предъявляются повышенные требования к производительности и в некоторых областях он все еще является догоняющим.
В прошлом было сложно найти вменяемую поддержку по этому веб-серверу на английском языке, так как на ранних этапах разработка и документация велись на русском языке. Вместе с ростом интереса к проекту документация была переведена на английский и теперь можно найти достаточное количество документации и от разработчиков веб-сервера, и от сторонних авторов.
Разработчики стороннего ПО также начинают поддерживать работу с Nginx и некоторые из них уже предлагают на выбор пользователя конфиги для работы или с Apache, или с Nginx. И даже без поддержки приложением работы с Nginx не составляет большого труда написать свой конфиг для интеграции приложения с Nginx.
Совместное использование Apache и Nginx
После того как вы ознакомились с плюсами и минусами Apache и Nginx у вас должно появиться представление того, какой из серверов больше подходит под ваши задачи. Однако, можно достигнуть лучших результатов используя оба сервера вместе.
Распространенной схемой использования является размещение Nginx перед Apache в качестве реверс-прокси. В такой конфигурации Nginx называют фронтендом, а Apache — бэкендом. При таком подходе Nginx будет обслуживать все входящие запросы клиентов и мы получим выигрыш из-за его возможности обрабатывать множество конкурентных запросов.
Nginx будет самостоятельно обслуживать статический контент, а для динамического контента, например для запросов к PHP-страницам, будет передавать запрос к Apache, который будет рендерить страницу, возвращать ее Nginx’у, а тот в свою очередь будет передавать ее пользователю.
Такая конфигурация очень популярна, Nginx используется в ней для сортировки запросов. Он обрабатывает сам те запросы которые может и передает Apache только запросы, которые не может обслужить сам, снижая таким образом нагрузку на Apache.
Эта конфигурация позволяет горизонтально масштабировать приложение: вы можете установить несколько бэкенд серверов за одним фронтендом и Nginx будет распределять нагрузку между ними, увеличивая тем самым отказоустойчивость приложения.
Заключение
Как вы можете видеть и Apache, и Nginx — это мощные, гибкие и функциональные инструменты. Для того чтобы выбрать сервер под ваши задачи необходимо определиться с требованиями к нему и провести тесты на всех возможных паттернах использования вашего приложения.
Между этими проектами есть значительные различия, которые могут оказать влияние на производительность, возможности и время реализации необходимое для внедрения и запуска каждого из решений. Выбор является серией компромиссов и не стоит пренебрегать тестами. В конечном итоге, не существует одного универсального веб-сервера под все возможные задачи, поэтому важно найти решение максимально соответствующее вашем задачам и целям.
Поиск наиболее производительного и надежного веб-сервера является краеугольным камнем любого успешного онлайн-бизнеса. Итак, сегодня мы собираемся помочь с подробным сравнением двух лидеров рынка — Nginx и Apache.
Apache — это серверный компонент стека LAMP ( Linux, Apache, MySQL и PHP ), известный набор программного обеспечения с открытым исходным кодом для создания веб-приложений и различных типов веб-сайтов.
Серверы Apache используют многопроцессорные модули ( MPM ), которые позволяют ему работать в трех разных режимах:
• Процесс – плохо масштабируется, подходит для небольших сайтов.
• Worker — использует сеть потоков, лучше масштабируется, но не подходит для веб-сайтов с высокой посещаемостью.
• Событие — эффективно обрабатывает более длительные соединения, настройка по умолчанию для большинства серверов, работающих под управлением Apache.
Платформа обладает богатым набором функций. Такие вещи, как балансировка нагрузки, кэширование обратного прокси -сервера и регулирование полосы пропускания, являются одними из самых популярных функций веб-разработчиков и администраторов серверов по всему миру.
Что такое Nginx?
Nginx вышел на сцену относительно поздно, почти через десять лет после Apache, но быстро завоевал рынок штурмом. Настолько, что сегодня на нем размещено около 500 миллионов веб-сайтов.
Некоторые говорят, что веб-сервер Nginx был разработан с единственной целью — превзойти Apache. На самом деле это было предложенное решение проблемы C10k — как веб-сервер может обрабатывать 10 000 одновременных подключений?
Nginx использует асинхронную архитектуру для выполнения своей работы — вместо потоков здесь у нас есть система, которая отслеживает, обнаруживает и анализирует события. На основе этих событий он применяет прогнозирующие меры для обработки нагрузки.
С точки зрения непрофессионала, у вас есть платформа, которая использует свои ресурсы гораздо эффективнее и соответствует текущему потреблению трафика.
Итак, какой из них набрал больше очков в очном сравнении?
Посмотрите на результаты теста:
Популярность — победитель: Nginx
источник: Неткрафт
Давайте совершим путешествие по переулку памяти и посмотрим, как выглядел рынок веб-серверов двадцать лет назад:
• Апачи – 60%
• Майкрософт – 27%
• Sun Technologies – 3%
Nginx вышел на сцену примерно в 2007 году. В то время Apache все еще уверенно занимал первое место с долей рынка 49%. Тем не менее, разработчики Nginx не теряли времени даром. Постоянное стремление к инновациям и оптимизации продуктов произвело впечатление на многих людей, и вскоре клиенты начали прибывать. Sun, Google, Microsoft — все популярные веб-серверы отставали и в конечном итоге были обойдены Nginx.
Лидерство Apache также было шатким вплоть до ноября 2018 года. Согласно отчетам веб-опросов, именно тогда Nginx наконец занял первое место. Так что сегодня конкурс популярности выглядит намного иначе, чем раньше:
• Nginx — 36%
• Апачи – 25%
• Майкрософт – 14%
Справедливости ради следует отметить, что серверы Apache по-прежнему размещают более активные веб-сайты, чем Nginx, но тенденция показывает, что это только вопрос времени, когда это изменится.
Производительность (статический контент) — победитель: Nginx
Если вы посмотрите на лучший рейтинг и самые популярные веб-сайты, вы найдете (по крайней мере) один общий знаменатель — они загружаются очень быстро. Скорость сайта в наше время вредна, и каждая секунда, потраченная на ожидание, равна потерянным посетителям и меньшему количеству продаж.
Nginx работает почти в два раза быстрее для статического контента, чем Apache с 512 одновременными подключениями, и в 2,4 раза быстрее с удвоением запросов. При этом потребление оперативной памяти ниже — чтобы справиться с нагрузкой, Nginx использовал на 5-6% меньше системной памяти.
Это различие связано в основном с архитектурой сервера.
Nginx не требует подключения к PHP при обслуживании статических файлов. Это делает запрос намного легче и проще в обработке.
Nginx здесь явный победитель, но имейте в виду, что эти результаты производительности относятся только к статическим страницам. В настоящее время большинство веб-сайтов обслуживают различные типы динамического контента, и веб-серверы должны быть соответствующим образом оптимизированы.
Производительность (динамический контент) — ничья
Сегодня почти 8 из 10 веб-сайтов так или иначе используют PHP в своем коде. Неважно, создаете ли вы веб-сайт на WordPress, Joomla, Magento или Drupal — запросы вашего сайта будут запускать среду выполнения PHP.
В отличие от статического содержимого, Apache гораздо лучше справляется с динамическими веб-страницами. Оптимизированная производительность зависит от конфигурации сервера, такой как активация модулей PHP-FPM и FastCGI.
Как только ваш Apache правильно настроен, динамические веб-сайты начинают работать. Серверы на базе Apache работают так же быстро, как Nginx. Тесты производительности не показали разницы между двумя соперниками ни во времени загрузки страницы, ни в потреблении памяти.
Apache (с небольшой настройкой) работает так же быстро, как Nginx для веб-сайтов на PHP.
Поддержка ОС — победитель: Apache
Для эффективной работы разных проектов требуются разные операционные системы, поэтому мы должны учитывать широкий спектр поддерживаемых типов ОС.
Какой веб-сервер более универсален?
Что касается дистрибутивов Linux, Apache и Nginx безупречны. Обе платформы могут легко работать с любой Unix-подобной системой, включая AIS и BSD.
То же самое касается пользователей macOS — любой из двух веб-серверов может легко запустить такой проект.
Переломным моментом в этом разделе нашего сравнения Nginx и Apache стала поддержка Windows. Хотя вы можете успешно запустить веб-сайт или приложение на базе Win с помощью Nginx, существуют определенные ограничения и отсутствующие функции.
Apache просто покрывает все это, позволяя вам больше сосредоточиться на разработке вашего проекта и меньше на преодолении ограничений сервера.
Безопасность — победитель: Nginx
Веб-мастера могут нести ответственность за защиту своих веб-сайтов от хакеров, но все начинается с аппаратной безопасности. Допустим, вы настраиваете и управляете собственным веб-сервером.
Apache использует код на основе C, который всегда соответствует последним стандартам безопасности. Вы можете найти обширную информацию о том, как защитить свой сервер от DDoS-атак, одной из самых серьезных угроз кибербезопасности в настоящее время.
Это хорошая база, но усиление вашей безопасности не должно останавливаться на достигнутом. Взять, к примеру, модули. Активировав функцию mod_evasive с Apache, вы гарантируете своему проекту полную безопасность от всевозможных HTTP-, DoS -атак и атак методом перебора.
Веб-сервер Nginx также очень серьезно относится к безопасности.
Платформа предоставляет достаточно возможностей для снижения рисков хакерских атак и обеспечения надежной защиты клиентских веб-сайтов.
Так что же делает Apache или Nginx лучше?
Как выясняется — огромный размер кодовой базы. Nginx имеет меньший и более оптимизированный код, что дает ему небольшое преимущество в отделе безопасности.
Модули – Рисовать
Модули помогают нам расширять функциональные возможности нашего сервера и оптимизировать наш онлайн-проект. Будь то обновление рабочей нагрузки, плагин для потоковой передачи мультимедиа или решение для фильтрации контента — мы сильно зависим от множества модов.
Так какой же из Nginx или Apache более гибкий и восприимчивый к настройкам?
На самом деле это не так уж и сложно, так как обе платформы по умолчанию поддерживают более 150 модулей. И это только дополнения собственной разработки. Если принять во внимание множество сторонних плагинов, цифры становятся еще более впечатляющими.
Что касается основных функций, оба веб-сервера поддерживают самое необходимое — балансировщики нагрузки, кэширование, прокси и т. д.
Есть определенные области, где одно или другое немного лучше (например, решения для потоковой передачи мультимедиа на Nginx), но в целом ничья — самый честный результат.
Поддержка (Документация) – Draw
Apache и Nginx в настоящее время являются самыми популярными серверами, поэтому вы можете легко найти множество документации по поддержке обеих платформ.
Официальные сайты компаний скорее ориентированы на разработчиков. Никаких причудливых дизайнов или функций, никаких ненужных мультимедиа — основное внимание уделяется контенту и обучению пользователей тому, как лучше всего управлять своим сервером. Документация Nginx кажется немного более удобной для новичков, но недостаточно, чтобы иметь существенное значение.
Кроме того, вы никоим образом не ограничены только официальными источниками.
Платформы с открытым исходным кодом и довольно популярны, а это означает, что многие люди могут внести свой вклад и добавить полезные ресурсы. Немного погуглив, можно найти конфигурационный файл, туториалы со скриншотами, видео, пошаговые руководства.
В конце концов, нет никакой видимой разницы, если сравнивать веб-сервер Apache и Nginx с точки зрения документации поддержки. Здесь ничья была бы самым справедливым вердиктом.
Поддержка (Live) — победитель: Nginx
Изучение управления сервером из хорошо написанного туториала — это хорошо, но оперативная помощь реального человека, когда она вам нужна, — еще лучше.
К сожалению, в отличие от услуг хостинга или создания сайтов, у разработчиков веб-серверов редко есть собственный персонал, занимающийся исключительно поддержкой клиентов. И снова мы говорим о платформах с открытым исходным кодом, так что не стоит возлагать слишком большие надежды.
Вы можете получить помощь по вопросам, касающимся Apache, на различных сторонних веб-сайтах. Такие места, как CodeMentor, не только связывают вас с опытными профессионалами, но также могут помочь вам нанять опытных разработчиков, которые полностью избавят вас от сложных задач администрирования сервера.
Nginx предлагает аналогичный опыт. Его популярность растет как на дрожжах, а фан-база — это сплоченная группа, всегда готовая приветствовать новых членов сообщества. Одна вещь склонила чашу весов в пользу Nginx — внутренняя поддержка.
Несмотря на то, что это платная услуга, лучшая помощь всегда приходит прямо из источника. В конце концов, кто может лучше знать все тонкости технологии, чем те самые люди, которые помогали ее разрабатывать?
Существует несколько пакетов, разделенных по типу необходимой вам помощи:
- Быстрый старт – первоначальная установка и настройка
- Check Up — аудит сервера и советы по оптимизации
- AWS Acceleration — полная настройка приложения
- Балансировка нагрузки — использование вашего сервера в качестве балансировщика нагрузки.
- Оптимизация производительности — точная настройка вашей машины для максимальной скорости
Nginx явно имеет более практичный подход к помощи в реальном времени, принимая во внимание этот момент.
Финальные дубли
- Nginx в 2-3 раза быстрее Apache при обслуживании статического контента, но при открытии динамических веб-страниц разницы нет.
- Nginx — гораздо более новая технология, но она уже занимает лидирующие позиции на рынке решений для веб-серверов.
- Apache прекрасно работает со всеми официальными экземплярами Linux и Windows. Nginx предлагает только частичную поддержку Windows.
- Существуют сотни полезных модулей как для Nginx, так и для Apache.
- Вы можете найти множество руководств по платформам в Интернете, но вы также можете получить помощь от штатных экспертов.
Это был близкий вызов, но в конце концов Nginx с небольшим перевесом выиграл. Мы считаем, что производительность и безопасность являются ключевыми факторами при выборе сервера, и в данном случае эти факторы имеют наибольшее значение.
Каковы ваши впечатления от Apache и Nginx ? Что быстрее и надежнее?
Вопросы-Ответы
В: Как проверить, является ли сервер Apache или Nginx?
О : Существует множество онлайн-инструментов, с помощью которых вы можете проверить, какой веб-сервер работает на веб-сайте. Более того, если конфигурация не слишком индивидуальна, вы также можете определить, какое программное обеспечение он использует, а также его плагины.
NetCraft и BuiltWith — две популярные сторонние платформы для оценки технологий. Вы просто вводите URL-адрес веб-сайта в строку поиска, и инструмент разбирает его за считанные секунды.
В: В чем разница между Apache и Nginx?
О: Несмотря на то, что технически Nginx и Apache являются веб-серверами, между ними есть несколько существенных отличий. Возможно, самый большой из них — это то, как они обрабатывают запросы пользователей. Nginx использует асинхронную и управляемую событиями архитектуру, поэтому он может быстрее и эффективнее обрабатывать несколько подключений.
Apache имеет многопоточную структуру, которой не хватает масштабируемости его конкурента. Кроме того, в то время как Apache разработан только как веб-сервер, Nginx может работать как веб-сервер, так и прокси-сервер.
В: Почему Nginx быстрее по сравнению с Apache?
A: Архитектура Apache основана на потоках. Каждый поток потребляет часть вашей системной памяти при обработке одного соединения. Каждое новое соединение увеличивает эту нагрузку, что в конечном итоге замедляет работу.
Для сравнения, Nginx обслуживает запросы асинхронно и многозадачно намного лучше. Вы можете поставить все соединения в очередь в один поток и потреблять гораздо меньше системных ресурсов для их обработки.
Nginx против Apache не имеет явного победителя по тестам скорости для динамического контента, но когда дело доходит до статических веб-сайтов, Nginx быстрее в 2-3 раза.
Finding the best performing and most reliable web server is at the cornerstone of any successful online business. So today, we are going to help with a detailed comparison of two of the market leaders – Nginx vs Apache.
What is Apache?
Apache is the server component of the LAMP stack (Linux, Apache, MySQL, and PHP), the prominent open-source software set for building web applications and various kinds of websites.
Apache servers utilize Multi Processing Modules (MPMs), which allow it to run in three different modes:
• Process – not very scalable, good for smaller websites
• Worker – utilizes a network of threads, scales better, but not suited for high-traffic websites
• Event – efficiently handles longer connections, the default setting of most Apache-run servers
The platform packs a rich set of features. Things like load balancing, reverse proxy caching, and bandwidth throttling are a few of the best-liked features by web developers and server admins worldwide.
What is Nginx?
Nginx arrived at the stage relatively late, almost ten years after Apache, but quickly took the market by storm. So much so, that it hosts close to 500 million websites today.
Some say that the Nginx web server was developed with the sole reason to outperform Apache. In reality, it was the proposed solution of the C10k problem – How can a web server handle 10,000 simultaneous connections?
Nginx relies on an asynchronous architecture to do the job – instead of threads, here we have s system that monitors, detects, and analyzes events. Based on these events, it applies predictive measures to handle the load.
In layman’s terms, you have a platform that uses its resources much more efficiently, and in tune with the current traffic consumption.
So which one scores better in the head-to-head comparison?
Have a look at the test results:
Popularity – winner: Nginx
source: Netcraft
Let’s take a trip down Memory Lane and check how the web server market looked twenty years ago:
• Apache – 60%
• Microsoft – 27%
• Sun Technologies – 3%
Nginx stepped into the stage around 2007. At that time, Apache was still sitting comfortably on top, with a 49% market share. Still, the Nginx developers wasted no time. The constant strive for innovation and product optimization impressed a lot of people, and clients soon started flooding in. Sun, Google, Microsoft –all the popular web servers lagged behind and were eventually bypassed by Nginx.
Apache’s lead was also shaky up until November 2018. According to the web survey reports, this is when Nginx finally took the top spot. So today, the popularity contest looks much more different than before:
• Nginx – 36%
• Apache – 25%
• Microsoft – 14%
To be fair, Apache servers still host more active websites than Nginx, but the trend shows its only a matter of time before that changes as well.
Performance (Static Content) – winner: Nginx
If you take a look at the best ranking and most popular websites, you will find (at least) one common denominator – they load super fast. Site speed is detrimental nowadays, and every second spent in waiting equals lost visitors and fewer sales.
Nginx performs almost two times faster for static content than Apache with 512 concurrent connections and 2.4 times faster with double the requests. At the same time, the RAM consumption is lower – in order to handle the load, Nginx used 5-6% less system memory.
This difference comes mainly from the server architecture.
Nginx doesn’t require any connection to the PHP when serving static files. This makes the request much lighter and easier to process.
Nginx is the clear winner here, but bear one thing in mind – these performance results are for static-only pages. Nowadays, the majority of websites serve various types of dynamic content, and web servers had to be optimized accordingly.
Performance (Dynamic Content) – Draw
Almost 8 out of 10 websites today utilize PHP in their code in some way. It doesn’t matter if you’re building a WordPress, Joomla, Magento, or Drupal website – your site requests will trigger the PHP runtime environment.
Unlike static content, Apache is much better at dealing with dynamic web pages. The optimized performance depends on the server configuration, like activating the PHP-FPM and FastCGI modules.
Once your Apache is properly set up, dynamic websites start flying. Apache-based servers are just as fast as Nginx. Performance benchmarks showed no difference between the two contenders, neither in the page load times nor in the memory consumption.
Apache (with a little tweaking) runs as fast as Nginx for PHP-driven websites.
OS Support – winner: Apache
Different projects require different operating systems to run efficiently, so a wide variety of supported OS types is a factor we must consider.
Which web server is more versatile?
When it comes to Linux distributions, Apache and Nginx are flawless. Both platforms can easily handle every Unix-like system out there, including AIS and BSD.
Same goes for the macOS users – any of the two web servers can easily run such a project.
The breaking point in this section of our Nginx vs Apache comparison was the support for Windows. While you can successfully run a Win-based website or app with Nginx, there are certain restraints and missing functionalities.
Apache simply covers it all, letting you concentrate more on developing your project and less on overcoming server limitations.
Security – winner: Nginx
Webmasters might be responsible for protecting their websites from hackers, but it all starts with the hardware security. Let’s say you are setting up and managing your own web server.
Apache relies on a C-based code, which is always up to the latest security standards. You can find extensive information on how to secure your server from DDoS attacks, one of the greatest cybersecurity threats nowadays.
This is a good base, but hardening your security shouldn’t stop there. Take modules, for example. By activating the mod_evasive function with Apache, you guarantee your project complete safety from all kinds of HTTP, DoS, and brute-force attacks.
The Nginx web server takes security quite seriously as well.
The platform gives enough options for mitigating the risks of hacker attacks and keep client websites well-protected.
So what makes Apache or Nginx better?
As it turns out – the sheer size of the code base. Nginx has a smaller and more optimized code, giving it a slight edge in the Security department.
Modules – Draw
Modules help us expand our server functionalities and optimize our online project. Be it with a workload upgrade, a media streaming plugin, or a content filtering solution – we heavily depend on a variety of mods.
So which one between Nginx vs Apache is more flexible and susceptible to customizations?
It’s a close call, really, as both platforms support over 150 modules by default. And those are just in-house developed add-ons. When you take into account the plethora of third-party plugins, the numbers get even more impressive.
• A detailed list of Apache modules
• a complete Nginx module list
• A detailed list of Nginx third-party modules
In terms of core functionalities, both web servers support the essentials – load balancers, caching, proxying, the works.
There are certain areas where one or the other is slightly better (like the media streaming solutions on Nginx), but overall, a draw is the fairest result here.
Support (Documentation) – Draw
Apache and Nginx are the most popular servers right now, so you can easily find plenty of support documentation for both platforms.
The official company websites are rather dev-oriented. No fancy designs or functionalities, no unnecessary multimedia – the focus is on content and teaching users how to best operate their server. Nginx’s documentation felt a bit more beginner-friendly, but not enough to make a significant difference.
Plus, you’re not in any way limited to the official sources alone.
The platforms are open-source and quite popular, which means that plenty of people can contribute and add to the helpful resources. With a little googling, you can find a configuration file, tutorials with screenshots, videos, step-by-step guides.
At the end of the day, there isn’t any visible difference when you compare the Apache web server vs Nginx in terms of support documentation. A draw would be the fairest verdict here.
Support (Live) – winner: Nginx
Learning about server management from a well-written tutorial is good, but prompt assistance from a real person when you need it – even better.
Unfortunately, unlike hosting or site-building services, web server developers rarely have in-house staff dedicated solely to customer assistance. And again, we are talking about open-source platforms, so we shouldn’t hold our hopes too high.
You can get assistance with Apache-specific questions on various third-party websites. Places like CodeMentor not only connect you to expert professionals, but can also help you hire skillful developers who will relieve you of the daunting server administration tasks altogether.
Nginx offers a similar experience. Its popularity is growing in leaps and bounds, and the fan base is a close bunch, always ready to welcome new members to the community. One thing tipped the scales in favor of Nginx – the in-house support.
Even though it’s a paid service, the best assistance always comes straight from the source. After all, who can better know the ins-and-outs of the technology than the very people that helped develop it?
There are several packages, separated by the type of help you need:
- Quick Start – initial setup and configuration
- Check Up – a server audit and optimization tips
- AWS Acceleration – a complete application setup
- Load Balancing – utilizing your server as a load balancer
- Performance Optimization – fine-tuning your machine for maximum speeds
Nginx clearly has a more hands-on approach to live assistance, taking the point in this one.
Final Takes
- Nginx is 2-3 times faster than Apache when serving static content, but there is no difference when opening dynamic web pages.
- Nginx is a much newer technology but already tops the market for web server solutions.
- Apache works great all official Linux and Windows instances. Nginx only offers partial support for Windows.
- There are hundreds of helpful modules for both Nginx and Apache.
- You can find tons of tutorials about the platforms online, but you can get assistance from in-house experts as well.
It was a close call, but in the end Nginx narrowly won. We believe performance and security are key when choosing your server and those factors carried the most weight in this case.
What are your impressions of Apache and Nginx? Which is faster and more reliable?
FAQ
Q: How to check if server is Apache or Nginx?
A: There is a variety of tools online where you can check what kind of web server a website is running. Even more, if the configuration isn’t too custom, you can also determine what software it uses as well as its plugins.
NetCraft and BuiltWith are two of the popular third-party platforms for technology assessment. You just input the website URL in the search bar and the tool deconstructs it in a matter of seconds.
Q: What is the difference between Apache and Nginx?
A: Even though Nginx and Apache are both technically web servers, there are a few distinct differences. Perhaps the biggest one, is the way they deal with user requests. Nginx employs an asynchronous and event-driven architecture so it can handle multiple connections faster and more efficient.
Apache has a multi-threaded structure, which lacks the scalability of its competitor. Plus, while Apache is designed as a web server only, Nginx can run as both a web and proxy server.
Q: Why Nginx is faster compared to Apache?
A: The Apache architecture is based on threads. Each thread consumes some of your system memory while handling single connection. Every new connection adds up to that load, slowing things down eventually.
In comparison, Nginx serves requests asynchronously and multitasks much better. You can queue up all connections in a single thread and consume much less system resources to process them.
Nginx vs Apache doesn’t have a clear winner according to speed tests for dynamic content, but when it comes to static websites – Nginx is 2-3 times faster.
What is a VPS – Everything you need to know!
Themeisle content is free. When you purchase through referral links on our site, we earn a commission. Learn More
While there are lots of different types of server software, you’ll often whittle the contenders down to Nginx vs Apache. This is because both offer top performance for many different server configurations, and suit certain applications better than the other.
Even so, you’ll still want to consider which one of these makes more sense for your needs. There are a few different categories to look into, such as operating system (OS) support, security, documentation, and (of course) performance.
For this post, we’re going to compare Nginx vs Apache in a number of different areas, including how popular each server is and their features and functionality. At the end, we’ll summarize our findings and give you the information you need to choose the right option.
Introducing Nginx and Apache
Before we get into the deep details of each server type, let’s give you the rundown on both Nginx and Apache. Once we get to the next section, you’ll learn about some of the use cases of both, and where you might see them “in the wild”.
Nginx ❇️
Compared to Apache, Nginx (pronounced “engine X”) is a relative newbie to the world of server-side technology. However, the development team took on the task of expanding upon the limitations of Apache systems.
It’s an open-source solution that lots of users consider for its stability and scalability. This is (in part) down to its event-driven architecture – more of which later. In fact, part of the goal for the initial Nginx release was to be able to handle 10,000 connections at once. This is something that was necessary back in 2004, due to the rapidly-expanding web at the time.
On the whole, sysadmins and site owners like Nginx because it’s performant, works great with static files, and performs the functions of a load balancer and a ‘reverse proxy’. These are all relevant to uptime, speed, and security.
Apache 🦅
Apache is somewhat an ‘elder’ of web server technology. It’s almost as old as the web itself – from 1995 Apache has been the software at the core of thousands, if not millions, of servers.
For a long time, Apache has been a dominant technology among ‘sysadmins’. There are lots of reasons for this – some performance-related, and others force of habit. Regardless, Apache servers see lots of use where configurations matter.
You’ll find Apache as pre-installed software on all Linux distros, so it’s a go-to solution for that OS. However, while it uses a different architecture to Nginx, it still offers power, scalability, and fantastic documentation.
Lots of sysadmins also like the customizable nature of Apache, and how you can make a server your own through loading various modules.
The general use cases for Nginx vs Apache
It’s fair to say that Apache is a “jack of all trades” when it comes to serving websites. However, this is a mixed blessing. Yes, Apache servers can do almost everything Nginx can do, but it’s at the expense of less performant code. Age is a factor here.
Because Apache arrived at a time before we have some of the more advanced applications for web servers, the codebase couldn’t do what it needed to serve modern websites. While these issues aren’t necessarily a cause for concern now, a solution such as Nginx works with the modern web in mind.
As such, you’ll find Apache is fantastic as an easy-to-configure server for applications such as shared hosting. Its integrations also see it used as local development server software, as part of the Linux, Apache, MySQL, and PHP (LAMP) stack.
In contrast, Nginx has a more mature software base, with greater streamlining compared to Apache. It’s good where stability and security are key, fundamental elements. You’ll find that an Nginx server isn’t as configurable as other types, and this means you will access its core less.
What’s more, it’s not modular in the same way that Apache is, which makes it less suitable for a situation where you need to carry out server customization.
Nginx vs Apache: How popular each server type is
For a long time, server software was akin to a one-horse race. Apache ran as a dominant force for a number of years and still holds a huge market share. Because of this, you’ll find there are lots of integrations and support for Apache servers, along with top-notch documentation.
This serves as further reason to choose Apache and contributes to its continued use. However, Nginx is server software with a massive market share of its own. There is a slow rise in Nginx usage over time, to the point that it’s now the most dominant web server technology on the market, although not by much.
Looking ahead, we’d suggest that Apache will see less use over time because Nginx provides a lot of what sysadmins need in a web server. However, LiteSpeed Web Server and Cloudflare Server are on the horizon and come with a growing user base and heavy backing. In a few years, this comparison could compare Nginx to one of these younger upstarts.
Nginx vs Apache: A technical breakdown of the features and functionality
The next few sections will cover a number of technical aspects of Nginx vs Apache – the main areas you’ll want to consider. Because these represent the core elements of both server types, you’ll have more than enough to go on when it comes to choosing the right software for you.
- Connection and request handling
- Configuring the server
- Request interpretation
- Resource utilization and performance
- Security and update maintenance
1. Connection and request handling
How a server handles connections is vital to know because this is its ‘core currency’. It’s arguable, but when people look to discuss the relative merits of Nginx vs Apache, connection handling plays a big part in the perceptions.
Nginx ❇️
Nginx is ‘asynchronous’ and ‘event-driven’, which means it can handle multiple requests at once and process them while there are available resources. It spawns ‘worker processes’ to handle the incoming connections, of which it expects thousands at a time. These are the ‘water carriers’ for the rest of the server.
For example, each worker process will listen out to process events and connections, and add them to a continuous loop. From there, the server can process each event and remove it when it finishes. The flow of an Nginx server provides inherent scalability, and the async, non-blocking architecture serves that too.
Apache 🦅
In contrast, Apache handles events one at a time through a number of Multi-Processing Modules (MPMs). A sysadmin will choose the connection architecture best suited to the task, of which there are a few.
The mpm_prefork
module is a common one. This spawns child processes for each event, and will only process one connection at a time. If the number of processes is higher than the number of requests, you’d struggle to tell the difference between Nginx vs Apache with regard to performance.
However, this type of situation is rare, and an Apache server will see a higher number of requests than processes on many occasions. What’s more, this MPM doesn’t scale well, due to memory usage.
For those working with PHP, mpm_prefork
is the only safe way to work with the mod_php
interpreter module. Despite the drawbacks, this will be the MPM a WordPress developer will choose if they have to deploy to an Apache server.
You will also see mpm_worker
and mpm_event
modules too. These perform a similar operation and scale better due to the way they can spawn multiple processes per collection of threads.
This batch of MPMs shows how flexible Apache can be, despite the drawbacks for performance in some cases.
Request handling for static vs dynamic content
Before we move on, we should mention static versus dynamic content for each server software. You’ll read that Nginx can’t process dynamic content, which might give you cause for concern. In fact, Nginx won’t process this type of content in a native way. Instead, it will send it out to an external processor (such as a cache), then wait for it to return before it moves the content on.
For development, a sysadmin will set up a solution such as Memcached for this. There are negatives to this approach, namely on performance. However, the benefits to the performance overheads for each portion of the chain negates this. Nginx doesn’t have to worry about processing these requests, so it can concentrate on its areas of responsibility with greater efficiency.
Apache’s MPM system lets it process both static and dynamic content without the need for other modules. For dynamic content, Apache embeds a language processor into each worker. It’s a simple approach that works well. You can also swap out modules if you need to make a change.
2. Configuring the server
One of the more apparent differences between Nginx vs Apache is how you configure each server. Nginx uses a centralized approach, which means a user has no way to configure a server outside of one main file. While this seems like a negative, there are lots of advantages:
- The server administrator is responsible for global security, which tightens up access to the server as a whole.
- A centralized server has greater performance than other types. This is because Nginx won’t need to handle requests to check for configuration files in each directory.
- There’s a knock-on effect here, as there won’t be any overrides for the server from multiple areas, further keeping request times down.
One way that a layperson will know they use an Apache server is the presence of .htaccess
files. These are configuration files that you can add almost anywhere on your server. Apache will check each element of a path for a .htaccess
file when a request is made.
This is fantastic for users who want to personalize their portion of server but could spell disaster if one of the directives causes performance or security issues. This decentralized approach is one of the reasons you’ll see Apache used on shared hosting. It’s also a reason why a content management system (CMS) such as WordPress offers good performance on Apache servers.
3. Request interpretation
One major difference of Nginx vs Apache that won’t seem apparent is how it interprets requests. In a nutshell:
- Nginx interprets and maps requests using a Uniform Resource Identifier (URI) for each component.
- Apache can also use URIs to interpret requests, but it’s more common to see a file-based path structure.
Because Apache is a web server first and foremost, it will use <Directory>
, <Files>
, or <Location>
blocks to define resources. The key concept here is that everything Apache ‘sees’ is related to the web server, so there is no ambiguity within the resource path. Think of a document tree, and this is how Apache ‘visualizes’ the server filesystem.
In contrast, Nginx has lots of use cases, such as a load balancer, proxy server, and a web server. Because of this, requests need to come as a URI for Nginx to process them. For example, Nginx uses server
and location
blocks: the former interprets the requested host, and the latter matches the URI portions afterward. The whole request becomes a URI.
On the whole, a URI is more flexible for Nginx, because it can adapt to whatever function it carries out. Even so, Apache’s system works, given that it only has to fulfill the role as a web server.
4. Resource utilization and performance
When it comes to Nginx vs Apache, relative performance and resource utilization are crucial factors. Of course, if one server type outperforms the other for your needs, it’s going to be a solid choice for you. There are a few areas to consider here.
First is resource efficiency. Nginx vs Apache differ in how they consume your server’s resources such as CPU and memory. If you had to choose a car, Nginx is more like a fuel-efficient hybrid rather than Apache’s traditional SUV. As such, both server types have different use cases, pros, and cons:
- Nginx can offer greater efficiency thanks to its superior request handling. If you run a WordPress site on a server with limited resources (or expect a lot of traffic), Nginx could be your go-to choice.
- While it’s not as resource-friendly as Nginx, Apache is still a solid choice thanks to its reliability and versatility. For small websites – or if you have more substantial server resources to spare – Apache can still do a good job.
Sites that want to grow need to scale. Here, Nginx shines thanks again to its request handling. In general, Nginx can facilitate rapid growth when you need it. Apache is no slouch in this department either, but it often requires greater fine-tuning as your website grows to maintain peak performance.
Finally, page load speeds are critical as they have a direct impact on your user experience (UX) and search engine optimization (SEO). Nginx is resource-efficient and lightweight. It serves web pages fast, which results in shorter loading times.
With proper configuration and optimization, Apache can achieve impressive page load speeds too. However, as with many of its facets, Apache often needs some configuration to adapt to your requirements. In contrast, Nginx is more of a ‘set-and-forget’ server type.
5. Security and update management
Security for a web server is the equivalent of a sturdy lock on the front door of your house. You want to make sure you ‘lock up’ the server against potential threats, and that you patch out any vulnerabilities. Both Nginx vs Apache have different approaches to this:
- Nginx has a reputation for robust security features. It can defend against common web attacks such as DDoS (Distributed Denial of Service) attacks and SQL injection. Nginx also excels at handling SSL/TLS encryption. This ensures a secure connection between your site and visitor servers for the data that passes through.
- On the other hand, Apache’s security provision is just as strong, but may require greater configuration and third-party modules for specific applications. However, with the right setup, Apache can still protect websites from modern and progressive malicious intent.
Part of managing your site’s security is to update server software on a regular basis. Nginx takes more of an automated approach to this. It typically provides seamless updates and quick responses to security vulnerabilities. Apache is also dependable when it comes to security. However, you’ll need to stay on top of security patches to ensure your configuration is up to date.
Both Nginx vs Apache offer robust security features, but in our opinion, Nginx often has the edge. This is because Apache (while reliable) may need a bit more hands-on attention to maintain the same level of security.
Nginx vs Apache: Which one you should choose for your server in 2023
The catch-all answer to, Which server software should I choose? is simple: It’s whichever one your hosting provider offers. In lots of cases, you won’t get a choice. We notice that lots of web hosts follow the same pattern you should match if you want to decide between Nginx vs Apache:
- If you want to run a server that needs constant configuration, or you want to give users a configuration choice, Apache will fit the bill.
- However, if you want to provide super performance, rock-solid security, and want to handle configurations rather than your users, Nginx is the way forward.
When it comes to performance, Apache can take up more memory because of its inherent architecture. Nginx is going to be better in high-traffic situations, especially if it has to handle lots of static content.
Therefore, if you rely on caching to store and serve content, Nginx could be the best option. However, remember that Nginx can’t serve dynamic content, so you’ll take more of a performance hit depending on the efficiency of the proxy your server uses.
Conclusion 🏁
There are lots of areas of WordPress (and running a website) that offer an almost overwhelming number of choices. This is the nature of the beast. However, it doesn’t help when you need to make your site live quickly.
Your choice of server type is one crucial and frontline decision that you’ll want to take extra care over. Nginx vs Apache is a common comparison because both offer benefits in certain situations.
Our opinion is that Nginx can cover the most bases with greater performance, which makes it the better option for most WordPress users. This is why many of the popular performance-focused WordPress hosts have moved towards an all-Nginx server stack, including Kinsta and Flywheel.
Regardless, you’re safe to use whatever your host offers if you don’t get that choice and most WordPress sites will be totally fine with either web server.
Where do you sit on the fence between Nginx vs Apache? Let us know in the comments section below!
Free guide
4 Essential Steps to Speed Up
Your WordPress Website
Follow the simple steps in our 4-part mini series
and reduce your loading times by 50-80%. 🚀
Free Access
На сегодняшний день двумя наиболее популярными веб-серверами с открытым исходным кодом для работы в Интернете являются HTTP-сервер Apache и NGINX. Более 50% веб-сайтов в мире работают на этих двух веб-серверах. В течение почти двух десятилетий веб-сервер Apache обслуживал около 60 процентов веб-сайтов в мире, пока не появился его конкурент NGINX (произносится как «engine-x»). В связи с резким ростом объемов трафика данных и количества пользователей всемирной паутины NGINX был создан для преодоления ограничений производительности веб-серверов Apache. NGINX, разработанный для обеспечения более высокого уровня параллелизма, может быть развернут как автономный веб-сервер и как внешний прокси-сервер для 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 являются мощными, гибкими и производительными веб-серверами. Последние версии обоих серверов являются конкурентоспособными во всех областях. Решение о том, какой сервер лучше подходит для вас, во многом зависит от оценки ваших конкретных требований и выбора наилучшего варианта.