Apache vs Nginx: Какой Веб - Сервер Лучше для Вас?

Интернет, каким мы его знаем сегодня, начал свое глобальное “завоевание” в 90 ’х годах. Весь “Веб - ” протокол может быть описан как посетитель, запрашивающий документ с заданного веб-адреса, с системой DNS и IP, перенаправляющей этот запрос на нужный компьютер. Этот компьютер, на котором размещена запрашиваемая веб-страница, будет обратно “обслуживать” веб-страницу посетителя. Попробуйте бесплатную демо-версию Веб-страницы, по сути, являющуюся HTML-документами. Чтобы иметь возможность обслуживать различные веб-страницы для посетителей, “обслуживающая” машина нуждается в серверной программе. Программное обеспечение, такое как Nginx vs Apache, обрабатывает запросы, анализирует их, а затем возвращает соответствующие документы для просмотра в браузере.

Apache vs Nginx: Какой Веб - Сервер Лучше для Вас?

 
 

Nginx против Apache 

 

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

 

  • Apache был выпущен первым в 1995 годузатем появился Nginx в 2004 году. 
  • Оба они используются крупными компаниями из списка Fortune 500 по всему миру. 
  • Доля рынка Nginx неуклонно растет в течение многих лет. 
  • В некоторых случаях Nginx имеет конкурентное преимущество с точки зрения производительности. 

 
 

Apache 

 

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

После CERN httpd и NCSA HTTPd Тима Бернерса-Ли в первые пару лет ИнтернетаApache – впервые выпущенный в 1995 году – быстро завоевал рынок и стал самым популярным в мире веб-сервером. В настоящее время он традиционно все еще находится в таком же положении на рынке. Apache разрабатывался и поддерживался фондом Apache под лицензией Apache. 

Есть две разные истории о том, как Apache получил свое название. В одной версии говорится, что название происходит от знаменитого наследия коренных американцев, в то время как в другой говорится, что это название является каламбуром на “исправленном сервере”, который последовал за серией программных исправлений. 

 

 

Linuxe 

Огромная доля Apache на рынке частично объясняется темчто он поставляется с предустановленными всеми основными дистрибутивами Linux, такими как Red Hat/Centos и Ubuntu. 

Ubuntu default page
 

Страница Ubuntu по умолчанию 

Одним из примеров важной роли Apache в мире Linux является то, что его имя серверного процесса-HTTPd, что делает Apache синонимом программного обеспечения веб-сервера. 

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

 
 

.htaccess 

 

Apache использует .htaccess для своей конфигурацииСуществует множество руководств по настройкередактированию и работе с этим файломпоскольку он обеспечивает большую гибкость в настройке тогокак Apache обрабатывает входящие запросыВот Некоторые примерыразличные правила перенаправлениямаксимальные размеры загружаемых файловперезапись URL-адресовограничения памятизащита каталогов (htpasswd), заголовки истечения срока действиязаголовки управления кэшемзаголовки кодированияфайлы cookie, манипуляции со строками запросов. 

С другой стороны, Kinsta использует Nginx, который не поддерживает файлы .htaccess. Однако настройки и правила из ваших файлов .htaccess можно легко “перевести” в собственный синтаксис правил перезаписи Nginx. 

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

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

Как говорится в официальной документации: 

 
 

“Как правило, вы должны использовать файлы .htaccess только в том случае, если у вас нет доступа к файлу конфигурации основного сервера.” 

 
 

Эта гибкостьоднакодостигается за счет производительности “разрешение файлов .htaccess приводит к снижению производительностинезависимо от тогоиспользуете ли вы их на самом деле или нет!” 

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

С веб-сайтами WordPress все может стать очень сложным. Типичный сайт WordPress может иметь сотни запросов из разных каталогов. 

Из /wp-content/uploads/yyyy/mm типа dirsкак правилоимеет несколько запросов на загрузку одной страницычасто образуя разные каталоги по месяцамЗатем будут статические ресурсы /wp-content/themes/parent-theme, ресурсы /wp-content/themes/child-theme: они будут включать javascript, css-файлыизображения. 

Затем также будут /wp-content/плагины со статическими файлами, загруженными из десятков подкаталогов плагинов. Для каждого из этих ресурсов Apache должен пройти через все свои стеки, чтобы найти конфигурацию. 

Один анализ показалчто типичная настройка WordPress, довольно распространенная для веб-сайтов на общих хостахбудет включать 42 отдельных выполнения .htaccess и 249 отдельных поисков файла .htaccess. 

Это только на уровне веб-сервера. Посетителю все еще нужно дождаться, пока процесс PHP выполнит весь стек вызовов WordPress, чтобы создать запрос к базе данных и передать его MySQL, чтобы собрать веб-страницу и отправить ее посетителю. 

 
 

Модули 

 

Еще одна вещькоторая сделала Apache популярным, - это его динамическая модульная система. 

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

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

 
 

Nginx 

 

Nginx (также пишется как nginx или NGINX) появился в 2004 годукогда он был впервые публично выпущен российским разработчиком Игорем СысоевымКак сказал Оуэн Гарретруководитель проекта Nginx: 

 
 

“Nginx был написан специально для устранения ограничений производительности веб-серверов Apache.” 

 
 

Сервер был впервые создан в качестве инструмента масштабирования для веб-сайта rambler.ru в 2002 году. Он поставляется в двух версиях: с открытым исходным кодом, с лицензией типа BSD, и Nginx Plus, с поддержкой и дополнительными корпоративными функциями. 

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

NGINX Inc acquired by F5 Networks
 

NGINX Inc приобретена компанией F5 Networks 

В марте 2019 года Nginx Inc была приобретена компанией F5 Networks за 670 миллионов долларов. В тот моменткак сообщает Techcrunchсервер Nginx обслуживал “375 миллионов веб-сайтов с примерно 1500 платежеспособными клиентами”. 

Согласно данным w3techsдоля рынка Nginx неуклонно растетвытесняя Apache и свергая его с первого места: 

 
Web server usage

Использование веб-сервера 

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

Percentage of websites using Nginx
 

Процент сайтов, использующих Nginx 

Тенденции поиска Google, похоже, также отражают этот факт: 

Google Search Trends: Nginx vs Apache
 

Тенденции поиска Google: Nginx vs Apache 

Опрос Netcraft показываетчто Apache был обогнан Nginx в апреле 2019 года. 

 
 

Конфигурация Nginx 

 

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

 
Kinsta hosting architecture.

Архитектура хостинга Kinsta. 

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

Performance impact Nginx vs Apache.png
 

Влияние производительности Nginx против Apache.png 

 
 

Модули Nginx 

 

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

В 2016 году, с версией 1.9.11, все изменилось, и официальный/проверенный репозиторий динамических модулей зарезервирован для платящих пользователей. С мая 2019 года они объявили о начале разработки поддержки QUIC и HTTP/3. 

 
 

Вопрос кэширования: Nginx против Apache 

 

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

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

Если мы используем Nginx в качестве автономного веб-сервера — как в случае с контейнерами Kinsta LXC такой необходимости нет. Nginx очень эффективен в обслуживании статического контента сам по себе. 

Затем возникает вопрос о динамическом кэше или кэше страниц. В сценарии веб-сайта WordPress это означает хранение всех страниц WordPress, созданных для каждого URL-адреса, в памяти или на диске. 

Кэширование FastCGI изначально доступно в стандартной установке Nginx. Это простаяочень мощная и одна из менее используемых функций Nginx. 

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

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

Вы устали от медленного хостинга WordPress? Мы используем полное кэширование страниц на уровне серверачтобы доставлять контент вашим посетителям почти мгновенно

 
 

Обработка запросов: Nginx против Apache 

 

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

Apache обрабатывает запросы с помощью MPM-s или мультипроцессорных модулейкоторые “отвечают за привязку к сетевым портам на машинеприем запросов и отправку дочерних элементов для обработки запросов.” 

Самым старым MPM, который восходит к истокам Apache, является модуль preforkТолько этому модулю можно приписать плохую репутацию производительности Apache. В этом режиме Apache создает новый процесс с одним потоком при каждом запросе. 

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

Это было неэффективно. Модуль Prefork поставляется с Apache в качестве модуля по умолчанию. Он также ограничивает подключения к HTTP/1. 

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

Nginx использует асинхронную, неблокирующую событийную архитектуру. 

Чтобы объяснить разницу: в мире Linux/Unix процессы запускают программы. 

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

Короче говоря, Apache использует процессы для каждого соединения (а с рабочим mpm он использует потоки). По мере роста трафика он быстро становится слишком дорогим. 

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

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

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

Именно по этой причине крупные сети доставки контентатакие как CloudflareMaxCDN и наш партнер KeyCDN — или веб-сайтытакие как Netflix, - считаютчто Nginx имеет решающее значение для получения контента. 

Список компаний, которые используют преимущества Nginx, слишком длинный, чтобы перечислить их все, поэтому мы закончим с Automattic, частной компанией, стоящей за этим WordPress.com. 

Automattic преобразовала все свои балансировщики нагрузки в Nginx для WordPress.com в 2008 году (вы можете прочитать об этом здесь) и полностью перенесли свой стек серверов в Nginx. 

 
 

Проверка в Реальной Жизни 

Если мы хотим проверить, что использует веб-сайт в производстве, мы обычно можем найти это в заголовках ответов HTTP. Это означает, что нам нужно будет щелкнуть правой кнопкой мыши на веб-сайт > Проверить, в инструментах разработчика мы выберем сетевую панель, а затем перезагрузим веб-сайт. Мы увидим все ресурсы, которые загружает сайт. Если мы выберем какой-либо конкретный ресурс и его вкладку Заголовки, мы обычно увидим информацию о сервере. Если веб-сайт использует CDN, мы можем увидеть что-то вроде Cloudflare в строке сервера или что-то вроде Varnish, если веб-сайт использует ускоритель HTTP. 

Это пример веб-сайта WordPress, который использует типичную настройку общего хостинга с cPanel, Apache и PHP: 

Apache http header
 

HTTP-заголовок Apache 

Это веб-сайт на Nginx: 

 
Nginx http header

HTTP-заголовок Nginx 

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

 
 

Итог 

 

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

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

В Kinsta мы используем Nginx как часть наших оптимизированных по производительности хостинговых решений для WordPress и WooCommerce. Каждый сайт WordPress размещается в собственном изолированном контейнерекоторый содержит все программные ресурсынеобходимые для его запуска (Nginx, Linux, PHP, MySQL). Ресурсы являются на 100% частными и не являются общими для других сайтов. 

 
 

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