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

Nginx или apache что лучше

Автор: | 16.12.2019

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

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

Общая информация

Прежде чем мы перейдем к более детальному сравнению Apache vs Nginx давайте рассмотрим общие характеристики этих веб-серверов.

Apache

Веб-сервер Apache был разработан Робертом МакКулом в 1995 году под руководством Apache Software Foundation. С 1999 и по сей день Apache — это проект Apache Software, и сейчас это одна из самых популярных их программ.

Начиная с 1996 года Apache был самым популярным веб-сервером на просторах интернета. Из-за такой популярности веб-сервер имеет много документации и комплексную поддержку со стороны других компаний.

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

Nginx

В 2002 году Игорь Сусоев начал работу над веб-сервером Nginx, он поставил перед собой цель решить проблему десяти тысяч подключений, которой были подвержены все известные на то время веб-серверы. Дело в том, что ни один из существующих веб-серверов, не позволял обрабатывать 10 тысяч запросов одновременно. Первый публичный релиз состоялся в 2004 году и цель была достигнута, благодаря реализации архитектуры, основанной на асинхронных событиях.

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

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

Отличия архитектуры

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

Apache

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

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

Каждый процесс потребляет оперативную память, поэтому MPM будет сложно использовать на слабом оборудовании. Но он по-прежнему может быть отличным выбором при работе с определенными компонентами. Например, php не поддерживает потоки, поэтому это единственный способ безопасной работы с mod_php.

mpm_worker — этот модуль создает процессы, которые управляют несколькими потоками. Каждый из потоков может обрабатывать одно соединение. Потоки гораздо эффективнее чем процессы, а это значит, что mpm_worker лучше, чем mpm-prefork. Потоков больше чем процессов и новые соединения могут взять любой из свободных потоков, вместо того чтобы ждать освобождения процесса.

mpm_event — этот модуль похож на mpm-worker, только оптимизирован для работы с keep-alive соединениями. При обработке в mpm-worker соединение будет держать поток занятым независимо от того активно оно или нет. mpm_event позволяет отдавать отдельные потоки для keep-alive соединений, так чтобы они не мешали работать другим потокам.

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

Nginx

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

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

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

Читайте также:  Asus zenfone 5 501cg

Генерация контента

С точки зрения использования в реальных сценариях наиболее часто выполняется сравнение Nginx или Apache при обработке динамического и статического контента

Apache

Apache может обрабатывать статическое содержимое с помощью процессов MPM. Динамическое содержимое обрабатывается путем встраивания интерпретатора нужного языка в каждый из процессов. Это позволяет обрабатывать динамическое содержимое внутри самого веб-сервера. А это, в свою очередь, означает, что настройка обработки динамики проще. Если требования к содержимому изменятся, то модули можно очень просто заменить.

Nginx

Nginx не обрабатывает динамическое содержимое. Для обработки PHP или других динамических запросов нужно использовать внешний интерпретатор и ждать пока он вернет результат обработки.

Это означает, что нужно настроить соединение между Nginx и одним из интерпретаторов. Nginx поддерживает такие протоколы FastCGI, SCGI, uWSGI, memcache. Это может немного усложнить ситуацию, особенно при попытке предвидеть количество соединений.

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

Отличия настройки

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

Apache

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

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

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

Nginx

Nginx не поддерживает интерпретацию .htaccess файлов или любой другой механизм настройки вне основного конфигурационного файла. Такой вариант менее гибкий, но у него есть свои преимущества.

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

Отличия определения путей

Веб-сервера по-разному интерпретируют запросы к документам, это тоже важное отличие Apache и Nginx.

Apache

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

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

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

Nginx

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

Основные блоки — это server и location, первый указывает какой хост запрашивается, а второй проверяет соответствие частей URL по регулярному выражению.

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

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

Модули

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

Apache

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

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

Nginx

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

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

Читайте также:  Lbd port recovered loop detection restarted

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

Поддержка и документация

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

Apache

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

Nginx

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

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

Использование Nginx и Apache

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

Для динамического содержимого, например, PHP, Nginx выступает в качестве прокси сервера и передает запрос к Apache. Затем результат возвращается клиенту.

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

Выводы

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

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

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 и считывает с него информацию, что естественно замедляет выдачу ответа клиенту (кстати, поддержку настройки конфигурирования на уровне директорий можно и отключить).

Читайте также:  Ip адрес телефона во внутренней сети

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$ (подробнее здесь).

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

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

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

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

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

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

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

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

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

*

code