Интернет, каким мы его знаем сегодня, начал свое шествие по планете в 90-х годах прошлого века. Тогда лишь малая часть пользователей представляла, как он работает, хотя объяснить на базовом уровне его работу достаточно просто. Если говорить простыми словами, выглядит это так: пользователь запрашивает страницу с заданным веб-адресом, а DNS и IP-система пересылают этот запрос на определенный компьютер (сервер), на котором находится запрашиваемая веб-страница. Сервер обрабатывает запрос и отдает страницу посетителю.
Любая веб-страница — это, по сути, HTML-документ Чтобы пользователи получали запрашиваемые страницы, на «обслуживающей» машине должна быть установлена специальная программа — веб-сервер. Именно он обрабатывает запросы, анализирует их и затем передает соответствующие документы в браузер пользователя.
Самыми популярными веб-серверами считаются Apache и Nginx. Они обслуживают суммарно более 50% всех веб-сайтов.
Apache
Apache, вышедший в 1995 году, быстро завоевал рынок и стал самым популярным веб-сервером в мире. В настоящее время он по-прежнему занимает эту позицию на рынке. Сегодня его разработкой и поддержкой занимается организация Apache Foundation.
- Linux
Огромная доля рынка Apache отчасти объясняется тем, что этот веб-сервер поставляется в составе основных дистрибутивов Linux, в том числе Red Hat/Centos и Ubuntu.
Помимо того, что Apache стал первым серьезным игроком на рынке веб-серверов, его популярность отчасти связана с его системой конфигурации и файлом .htaccess.
- .htaccess
Для конфигурации Apache используется файл .htaccess. В сети вы найдете множество руководств, как работать с этим файлом. С помощью .htaccess можно настроить правила редиректа, максимальные размеры загружаемых файлов, cookies и многое другое.
Одним из главных плюсов Apache является то, что каждый каталог в дереве каталогов может иметь свой собственный файл .htaccess с независимой конфигурацией.
Благодаря этой особенности Apache провайдеры shared хостингов могут предоставлять сотням пользователей на одной машине возможность индивидуально настраивать обслуживание своих сайтов, не влияя на работу сайтов других пользователей.
- Модули
Еще одна фича, которая сделала Apache популярным, — это его система динамических модулей.
Модули как функция, позволяющая пользователям расширять функциональность веб-сервера, существуют как в Nginx, так и в Apache. Однако Apache позволяет пользователям устанавливать модули уже после развертывания веб-сервера, а также включать/выключать их по мере необходимости. В дистрибутивах на базе Debian есть команды, позволяющие управлять модулями без редактирования каких-либо конфигурационных файлов — a2enmod и a2dismod.
Nginx
Nginx увидел свет в 2004 году благодаря российскому разработчику Игорю Сысоеву.
Изначально веб-сервер был создан как инструмент масштабирования для сайта rambler.ru в 2002 году. Поставляется в двух версиях: с открытым исходным кодом, под лицензией типа BSD, и в формате Nginx Plus, с поддержкой и дополнительными корпоративными функциями.
На заре своего существования Nginx главным образом использовался для обслуживания статических файлов, в качестве балансировщика нагрузки или обратного прокси. Однако интернет развивался, владельцы веб-сайтов и хостеры старались выжать максимум скорости, и постепенно Nginx стал заменять Apache.
В марте 2019 года Nginx Inc была куплена компанией F5 Networks за 670 миллионов долларов. На тот момент, по данным Techcrunch, сервер Nginx обеспечивал работу «375 миллионов веб-сайтов». Согласно информации w3techs, доля рынка Nginx неуклонно растет, и разработка российского разработчика постепенно вытесняет Apache.
- Конфигурация Nginx
У Nginx нет такой системы конфигурации, как у Apache, поэтому, несмотря на его высокую скорость работы и производительность, он не стал любимчиком хостинг-провайдеров.
С другой стороны, отсутствие конфигурации на уровне директорий дает Nginx значительное преимущество перед Apache. Вот табличка с сравнением производительности этих двух веб-серверов:
- Модули Nginx
Система модулей Nginx — это еще одна вещь, которая делает его более сложным с технической точки зрения решением. С их установкой придется попотеть. К тому же у веб-сервера долгое время отсутствовал репозиторий динамических модулей — он появился лишь в 2016 году, в версии 1.9.11.
Кэширование: Nginx против Apache
Кэширование — если упрощенно — можно представить как предварительную подготовку контента. Зачем это нужно? Когда посетитель "постучит в дверь", контент будет уже готов.
Как и Apache, Nginx фактически работает между сервером-источником и конечным пользователем, что позволяет ему кэшировать статическое содержимое и выдавать клиенту запрашиваемый контент без необходимости каждый раз получать его с сервера-источника. Если мы используем Nginx в качестве отдельного веб-сервера, такой необходимости нет — Nginx очень эффективно обслуживает статический контент самостоятельно.
А как обстоят дела с кэшированием динамического контента и страниц? Ведь в случае с сайтом на WordPress это де-факто означает хранение в памяти или на диске всех страниц, сгенерированных для каждого URL.
Для этого у Nginx есть модуль FastCGI, который позволяет использовать директивы для кэширования динамического контента.
Да, у Apache для этого есть mod_cache, однако он нередко конфликтует с другими модулями, из-за чего многие пользователи отзываются о нем как о крайне глючном решении. По этой причине в качестве инструмента кэширования в Apache используется Varnish. Несмотря на то, что Varnish — специализированное отраслевое решение, по результатам многих тестов преимущество все же у Nginx.
Обработка запросов: Nginx против Apache
Самая большая разница между Apache и Nginx заключается в базовой архитектуре обработки запросов.
Apache обрабатывает запросы с помощью MPM (Multi-Processing-Modules), которые "отвечают за привязку к сетевым портам на машине, прием запросов и отправку дочерних процессов для обработки запросов".
Самым старым MPM, который появился еще во времена зарождения Apache, является модуль prefork. Именно ему Apache обязан своей плохой репутации в плане производительности.
- При использовании этого модуля Apache запускает по одному процессу на каждый запрос.
- Использование prefork вместе с mod_php приводит к тому, что сервер Apache встраивает интерпретатор PHP в каждый процесс, даже если он обслуживает CSS-файлы или изображения.
- Prefork ограничивает соединения до HTTP/1.
В отличие от Apache Nginx обладает асинхронной, неблокирующей, событийно-управляемой архитектурой.
На этом моменте остановимся чуть подробнее. Итак, в мире Linux/Unix процессы — это запущенные программы. У одного процесса может быть несколько потоков, как несколько вкладок в браузере.
Ранее Apache для каждого соединения создавал отдельный процесс (с worker mpm он использует потоки). Создание нового процесса или потока можно представить как загрузку компьютера или запуск программы. Даже если у вас новенький быстрый ПК, это все равно займет какое-то количество времени.
Event mpm оптимизировал этот процесс, но некоторые тесты показывают, что Nginx ему не обогнать. Особенно когда речь идет о статических файлах, в случае с которыми Nginx обслуживает в два раза больше запросов, чем Apache.
В идеале у Nginx один рабочий процесс на процессор/ядро. Каждый из них может обрабатывать сотни тысяч входящих сетевых соединений. Нет необходимости создавать новые потоки или процессы для каждого соединения.
Именно по этой причине крупные сети доставки контента — Cloudflare, MaxCDN и KeyCDN — и ресурсы типа Netflix считают Nginx необходимым инструментом для быстрой доставки контента.
Automattic, компания-разработчик популярной CMS Wordpress, в 2008 году перевела все свои балансировщики нагрузки и серверный стек именно на Nginx.
Проверка в режиме реального времени
Хотите узнать, на чем работает тот или иной сайт? Ответ на свой вопрос вы найдете в HTTP-заголовках. Зайдите в инструменты разработчика, найдите раздел Сеть и перезагрузите сайт. Выберете любой ресурс и откройте вкладку Заголовки (Headers) — там вы и найдете информацию о сервере.
Сайт на Apache:
А вот сайт на Nginx:
Подведение итогов
В этой статье мы рассмотрели основные отличия Nginx от Apache и попытались проанализировать, какие функциональные и архитектурные особенности помогли Nginx завоевать уважение на арене веб-серверов.
Конечно, Nginx — это не панацея, и в каждом конкретном случае нужно выбирать тот веб-сервер, который наиболее подходит под ваши задачи. Главное, что есть из чего выбирать: помимо этих двух популярных веб-серверов есть Lighttpd, IIS, LiteSpeed, Caddy и другие неплохие решения.
Панель ISPmanager позволяет управлять веб-серверами Apache и Nginx: устанавливать, настраивать config file, вести мониторинг ресурсов. Есть возможность определить режим работы веб-серверов — в связке или по отдельности. Сегодня для большинства проектов используется режим Nginx+Apache — именно такой режим обеспечивает высокую производительность. Для расширения возможностей ISPmanager доступны дополнительные модули: KernelCare для автообновления ядра Linux, DDoS-GUARD для защиты от DDoS-атак, бесплатный конструктор сайтов Site.pro, автоустановщик скриптов Softaculous, операционная система для организации виртуального хостинга CloudLinux.