Веб-серверы Apache и Nginx
Ни один сайт не обходится без веб-сервера. Так называется программа, которая стоит на физическом сервере (удаленном компьютере) и принимает запросы от клиента, а в ответ отправляет HTML-страницу, изображение, файл или какой-нибудь медиапоток: музыку, фильм, стрим. Клиентом может быть веб-браузер или любая другая программа, которая хочет пообщаться с нашим веб-сервером.
Взаимодействие клиента и сервера
Итак, клиент отправляет запрос, веб-сервер его изучает, и в соответствии с тем, как его настроили, делегирует запрос одному из внутренних приложений. Приложение проводит необходимые действия и возвращает веб-серверу результат, тот отдает его клиенту.
В общем, веб-сервер — это классический посредник, который общается с клиентами стандартным образом так, что тем не нужно ничего знать о внутреннем устройстве сайта. Если запрос клиента выполнить нельзя, веб-сервер тоже должен об этом сообщить, чтобы клиент понимал, в чем проблема и по возможности исправил ситуацию. Например, авторизовался на сайте, чтобы подтвердить имеющиеся права доступа, или скорректировал опечатку в, чтобы не получать от сервера ошибку 404.
Веб-серверы
Клиенты могут быть самыми разными, а вот в качестве таких посредников-программ, как мы описали выше, обычно используют один из двух веб-серверов: Apache или Nginx. Обе программы имеют открытый исходный код, подробную документацию и поддерживаются крупными сообществами, но появились в разные периоды времен с разными требованиями к веб-серверам. Сейчас поясним.
Apache
Apache появился в 1990-х годах, как решение задачи доставки веб-контента в быстро растущем интернете. Архитектура Apache состоит из ядра и связанных с ним модулей: ядро принимает соединения, а модули соответствуют функциям, выполняемым по запросу. За счет модулей веб-сервер умеет не только обрабатывать HTTP-соединения, но также выполняет дополнительные функции.
- Балансировка нагрузки — разделение трафика между серверами внутренней сети, чтобы распределить задачи и обеспечить отказоустойчивость системы. Примерами таких модулей в Apache являются
mod_status
иmod_proxy_balancer;
; - Кэширование информации — хранение ответов заданное время, чтобы при повторном обращении сократить количество запросов на бэкенд. Примером такого модуля в Apache является
pagespeed
, он используется для сжатия и кэширования данных; - Поддержка разных протоколов и видов запросов: не только HTTP, но также протокол передачи файлов FTP (модуль mod_ftp), протоколы электронной почты и другие;
- Поддержка разных операционных систем и языков программирования.
Apache – это надежный веб-сервер с относительно простой настройкой для небольших веб-приложений, но по мере увеличения числа запросов централизованная архитектура Apache приводит к замедлению работы веб-сервера.
Nginx
Nginx (произносится энджи́нкс или э́нжин-и́кс) появился в середине 2000-х как решение российских разработчиков, которое устраняло бы ограничения Apache за счет применения другого подхода к архитектуре веб-сервера.
Apache по умолчанию создаёт для одного входящего соединения один программный поток и не приступает к следующему соединению, пока не закончил обслуживать предыдущее. Nginx запускает в параллели несколько процессов, каждый из которых может обрабатывать тысячи HTTP-соединений.
Асинхронная архитектура Nginx делает нагрузку более предсказуемой с точки зрения использования ресурсов и задержек, и в результате сам сервер легко масштабируется на самом простом «железе». По всем тестам производительности Nginx либо сопоставим, либо работает быстрее и потребляет меньше памяти, чем Apache. Nginx также чаще выбирают для сайтов с поддержкой современных веб-технологий: HTTP/2 и IPv6.
Apache vs Nginx
Главное различие между двумя веб-серверами состоит в механике обслуживания множества соединений. Apache реализует несколько решений с помощью трёх Multi-Processing модулей (MPM). Разработчик сам решает, какой модуль использовать в зависимости от задачи:
mpm_prefork
запускает под каждый запрос один процесс, а в нем единственный поток обработки, так что в один момент времени процесс обслуживает только одно соединение;mpm_worker
запускает в каждом процессе несколько потоков обработки данных. Переключение между потоками требует меньше программных ресурсов и, чем между процессами. Освободившийся поток сразу берётся за новое соединение;mpm_event
работает аналогичноmpm_worker
, но оптимизирован под keep-alive соединения. В рамках такого типа соединений отправляется множество пар запрос-ответ без открытия новых соединений. Модуль выделяет разные потоки под разные типы соединений, так что сервер не увязает в обработке keep-alive.
Если вы незнакомы с понятиями процессов и потоков, описание MPM-модулей Apache окажется трудным для восприятия. Это ещё одна причина, почему начинающие разработчики выбирают Nginx. Ведь этот веб-сервер исходно спроектирован на базе асинхронных алгоритмов, и даже без использования модулей Nginx отлично справляется с большим количеством соединений, так что разработчику не приходится предпринимать дополнительных действий.
Для настройки Nginx достаточно создать один конфигурационный файл nginx.conf
, а для Apache нужно редактировать файлы настроек на нескольких уровнях операционной системы, в том числе специальных файлов .htaccess
, регулирующих права на уровне каталога.
Может показаться, что Apache во всём проигрывает Nginx, но с той задачей, для которой он разрабатывался (доставка веб-контента), он справляется хорошо, и к тому же поддерживает многие языки программирования. Поэтому два веб-сервера часто используют в связке.
Apache + Nginx
Важным фактором распространения Nginx стало то, что он может выступать в роли обратного прокси-сервера — транслировать запросы от клиентов из внешней сети на серверы внутренней сети, в том числе веб-серверы Apache. Это распространенный шаблон в системном администрировании: Nginx берет на себя всю рутинную работу по кэшированию статических файлов и распределению запросов, Apache или другой веб-сервер запускает процессы для возврата динамически генерируемого контента веб-страниц.
Пара альтернатив
Apache и Nginx вместе обслуживают не менее половины всех сайтов, но и у них есть альтернативные решения. Третью и четвертую строчку в рейтинге самых популярных веб-серверов обычно занимают IIS и LiteSpeed.
- IIS — веб-сервер, разработанный Microsoft для своих операционных систем. По умолчанию он выключен в Windows, но его можно активировать специально. IIS используется для проектов на базе Windows Server и веб-приложений с использованием технологии ASP.NET.
- LiteSpeed является современной альтернативой Apache и совместим с его файлами настроек, но дает более высокую производительность, задействует меньше ресурсов и умеет эффективно кэшировать данные. Сервер является проприетарным, но у него есть и open-source версия под названием OpenLiteSpeed.
Как попробовать работу с веб-сервером
Самый простой способ попробовать работу с веб-сервером — панель ispmanager. В панели можно установить любой из популярных веб-серверов с открытым исходным кодом: Apache, Nginx или OpenLiteSpeed. Далее запустить на их базе приложение и проверить результат работы в реальном времени.