1. Главная страница » Компьютеры » Nginx отличие от apache

Nginx отличие от apache

Автор: | 16.12.2019

10 отличий Apache от Nginx

Доброго времени суток, backend/frontend/full-stack/devops/qa/.. да какая разница, добро пожаловать, мой друг!

Свой цикл статей хотелось бы начать с до неприличия банальной фразы — «Все познается в сравнении». Ведь невозможно говорить о том, что какой-либо инструмент лучший, не опробовав другой. Попробуем сравнить два самых популярных в мире веб-сервера — Apache, который обслуживает около 60 млн сайтов, и Nginx — около 40 млн (больше интересной статистики тут). Возможно, после прочтения данной статьи вы сможете определиться, что лучше подходит для вашего dev-окружения. Итак, поехали! 😉

Начнем с архитектурных и функциональных отличий.

1. Метод обработки соединений с клиентами

Издавна, Apache на каждый запрос от клиента создает отдельный процесс (или поток, зависит от выбранного mpm модуля). Выглядит это следующим образом — клиент отправляет запрос, веб-сервер создает отдельный процесс на этот запрос, отвечает клиенту и блокирует процесс до тех пор, пока клиент не закроет соединение. Это легко и просто в реализации, дебаге и мониторниге, но … Как вы могли бы догадаться, если у вас highload проект, то.. дела плохи. Процесс в любой ОС требует памяти и ресурсов, а когда процессов становиться неприлично много, обработка соединений неприлично замедляется, память кончается, CPU растет. Для мелких проектов такая реализация архитектуры обработки соединений не добавит головной боли, но для высоконагруженных проектов придется ставить очень мощное железо или искать альтернативные варианты.

Nginx состоит из master-процесса и нескольких дочерних процессов. Мастер процесс обычно один — он создает дочерние процессы (воркеры, загрузчик кеша и кеш менеджер), считывает конфигурацию и открывает порты. Воркеров обычно несколько, разработчики nginx советуют количество воркеров определять равным числу ядер машины. Эти дочерние процессы буду обслуживать все соединения с клиентами в неблокирующей манере. В nginx используется бесконечный цикл, который бежит по всем соединениями и отвечает на запросы клиентов. Когда соединение закрывается, оно удаляется из event loop. Это решение идеально подходит для проектов, которые обслуживающих 10к+ соединений одновременно. При этом, загрузка CPU и использование памяти обычно равномерны, без видимых пиков.

2. Отдаваемый контент

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

Nginx — отдает только статику и из коробки генерировать динамический контент не умеет. Если вы используете nginx и хотите генерировать динамический контент на своем сайте, то вам придется проксировать запросы тому, кто это делать умеет (apache, php-fpm и др.). Поэтому, разработчикам придется настраивать дополнительную связку, которая усложняет архитектуру, например nginx+apache (кстати в этой связке, Apache называют бекенд сервером, а Nginx — фронтендом), nginx + phpfpm, nginx + python и др.

3. Конфигурирование

Apache полюбился разработчикам и сисадминам не в последнюю очередь из-за возможности конфигурировать обработку соединений на уровне директорий. Делается это с помощью скрытого файла .htaccess, позволяющего настраивать права доступа, авторизацию, аутентификацию, политику кеширования и др правила. Это довольно-таки удобное решение для пользователей, потому что позволяет менять конфигурацию на лету, без перезагрузки сервера и без наличия доступа к основному конфигу сервера. Но также имеется маленький минус — Apache каждый раз при обработке соединений ищет файл .htacces и считывает с него информацию, что естественно замедляет выдачу ответа клиенту (кстати, поддержку настройки конфигурирования на уровне директорий можно и отключить).

Читайте также:  Https transcend info com

Nginx не поддерживает конфигурирование на уровне каталогов. Существует один конфигурационный файл на весь проект, который обрабатывает master. Если вы хотите обновить конфигурацию, то необходимо отправить сигнал SIGHUP мастеру, который в свою очередь перезагружает конфигурацию и плавно завершает работу воркеров.

4. Работа с модулями

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

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

5. Интерпретация запросов

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

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

6. Работа со скриптовыми языками

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

В случае с nginx, каждый виртуалхост будет выполняться в отдельном процессе и, соответственно, может использовать разные версии php (python/ruby/perl и др.). Каждый процесс может иметь свою собственную независимую конфигурацию.

Вообще, в высоконагруженных проектах удобнее держать раздельно nginx и php. По отдельности их проще мониторить, ловить баги или узкие места. «Все-в-одном» Apache+mod_php в этом плане менее удобен.

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

7. Скорость работы

Скорость работы веб-сервера обычно измеряют для 2-х случаев отдачи контента: для статики и динамики. На основе тестов производительности, Nginx примерно в 2.5 раза быстрее отдает статику, чем Apache. Это довольно-таки большое превосходство. Если вам необходимо обслуживать большое количество статического контента, Nginx — лучший выбор. Во время тестирования отдачи динамического контента, Apache и Nginx показывают примерно одинаковые результаты. С точки зрения памяти, оба сервера используют один и тот же объем ресурсов. (Подробнее о тестах скорости отдачи контента можно почитать здесь)

8. Поддержка ОС

Apache прекрасно работает на Unix-подобных операционных системах, также разработчики этого веб-сервера полностью поддерживают линейку Microsoft Windows, включая последние версии этой ОС.

Nginx также поддерживает работу на множестве Unix-подобных ОС и имеет некоторую поддержку Windows, которая не является полной. Но разве кто-то в наше время размещает веб-сервер на Windows?

9. Сообщество и поддержка

Apache на рынке с 1995 года, что очень немалый срок, обеспечивший инструменту огромное сообщество и поддержку с его стороны. Практически на все вопросы на Stack Overflow уже есть исчерпывающие ответы. Коммерческой поддержки нет.

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

10. Документация и обучение

И у Apache и у Nginx присутствует доступная официальная документация.

Nginx предлагает платное обучение, включающее в себя онлайн курсы, практические занятия и экзамен. По окончании курса все участники получают сертификаты. Например, сдать экзамен по основам nginx и получить официальный сертификат обойдется в 49$ (подробнее здесь).

Читайте также:  Apple watch series 4 сапфировое стекло

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

прокидывать через nginx, apache или fastcgi

nginx, apache и fastcgi — это не одно и тоже
Nginx и Apache — Это веб сервер для работы с HTTP протоколами.
fastcgi — Это протокол
В чём именно у вас вопрос?

какой сервер когда лучше использовать?

Если кратко — nginx лучше. Он разработан позже и учитывает множество ранее непредвиденных проблем. Как правило, apache используют там, где нужно больше гибкости, но возможно это уже устаревшая информация, т.к. nginx продолжает развиваться.

К сведению: nginx тоже работает в несколько процессов, при этом их количество лучше соответсвует возможностям машины. В это время, apache создаёт новые потоки под каждое соединение — и да, эта информация тоже может оказаться устаревшей, т.к. apache ещё не похоронили.

Для чего нужны Nginx или Apache и что выбрать?

Apache и Nginx (произносится как «engine-x») являются лучшими игроками в бизнесе веб-сервера. Вместе они составляют почти 50 процентов веб-трафика. Являясь двумя наиболее распространенными и популярными веб-серверами с открытым исходным кодом, они работают над общей целью — это забота о разнообразных рабочих нагрузках для удовлетворения потребностей различных сред для современных операционных систем, включая Windows и UNIX. Хотя Apache является зарегистрированным именем в бизнесе веб-сервера, у Nginx есть свои руки с таким количеством веб-сайтов и скоростью, с которой он управляет веб-трафиком, нет оглядываться назад. Это правда, что оба веб-сервера не могут быть заменены друг на друга, но у них есть их доля плюсов и минусов.

Что такое Apache?

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

Apache остается первым выбором среди администраторов сервера из-за его совместимости с питанием и поддержки нескольких платформ. Хотя Apache работает эффективно практически во всех основных операционных системах, включая Windows, Linux, UNIX, OSX и NetWare, он обычно используется в сочетании с Linux. Его архитектурная простота и гибкость сделали его популярным выбором среди администраторов, потому что в ранних сообществах была определенная жажда инноваций и экспериментов с новыми технологиями, и Apache был в центре этого. Apache стал основой Всемирной паутины. Но это все. Как говорится в старой поговорке, когда вы на вершине, единственный путь вниз.

Что такое Nginx?

Они говорят, что потеря в чужой выгоде. Это именно то, что произошло. Могучий статус Apache был поражен его потенциальным соперником Nginx. Nginx — одна из первых среди ранних претендентов на получение всемирного признания, также является надежной платформой веб-сервера, предназначенной для обслуживания современных веб-запросов. Nginx, разработанный российским разработчиком Игорем Сысоевым, является бесплатным HTTP-сервером с открытым исходным кодом, который также может использоваться как обратный прокси, почтовый прокси и общий прокси-сервер TCP / UDP. Он ориентирован на обслуживание большого количества одновременно работающих пользователей и с минимальными ресурсами. В то время, когда обработка массивного веб-трафика была совершенно невозможной, Nginx пришел на помощь.

Хотя Nginx не может конкурировать с многофункциональным Apache на многих фронтах, его асинхронный статус и однопоточная архитектура делают его разумным выбором по сравнению с Apache. Администраторы часто предпочитают его ресурсоэффективность, легкую архитектуру и высокий уровень параллелизма. И самое главное, он может быть развернут как автономный HTTP-сервер для улучшения архитектуры веб-сервера с использованием минимальных ресурсов. Плюс его способность быстро и эффективно обслуживать статический трафик с ограниченными аппаратными ресурсами не имеет себе равных. Кроме того, Nginx также может быть потенциальным амортизатором, который защитит серверы Apache от внезапных всплесков трафика и уязвимостей безопасности. Короче говоря, Nginx предоставляет все основные функции HTTP-сервера, не жертвуя способностью обрабатывать несколько запросов с ограниченными аппаратными ресурсами.

Читайте также:  Deus ex mankind divided ошибка 0xc0000142

Разница между Apache и Nginx

  1. Хотя Apache и Nginx являются двумя основными игроками в бизнесе веб-сервера, охватывающим 50 процентов веб-трафика через Интернет, они отличаются друг от друга. Apache — это HTTP-сервер с открытым исходным кодом, тогда как Nginx — высокопроизводительный асинхронный веб-сервер и обратный прокси-сервер.
  2. Поддержка, исправления ошибок и разработка приложений на HTTP-сервере Apache управляются и поддерживаются сообществом пользователей со всего мира и координируются Apache Software Foundation. Поддержка и обслуживание Nginx осуществляется компанией с таким же названием, которая была основана в 2011 году.
  3. Основное различие между ними заключается в том, как обрабатываются запросы клиентов. Хотя Apache предоставляет множество модулей многопроцессорной обработки для обработки запросов клиентов и веб-трафика, Nginx сконструирован таким образом, чтобы одновременно обрабатывать несколько клиентских запросов с минимальными аппаратными ресурсами.
  4. В HTTP-сервере Apache один поток связан только с одним соединением, тогда как один поток в Nginx может обрабатывать несколько соединений. Все процессы помещаются в цикл событий вместе с другими соединениями и управляются асинхронно. Этот процесс потребляет меньше памяти, что повышает производительность.
  5. Apache имеет многопоточную архитектуру, которая не обладает масштабируемостью. С другой стороны, Nginx следует асинхронному методу, основанному на событиях, для обработки нескольких клиентских запросов. Его управляемая событиями архитектура разработана таким образом, чтобы обеспечить лучшую производительность даже при интенсивном движении.
  6. Apache обслуживает статический контент с использованием обычных методов и обрабатывает динамический контент изначально внутри самого веб-сервера.С другой стороны, Nginx не имеет возможности обрабатывать динамический контент внутри компании. Фактически, он полагается на внешние процессы для исполнения.

Apache vs. Nginx: Сравнительная таблица

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

Резюме по Apache vs. Nginx

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *