Основное назначение веб-сервера заключается в обслуживании страниц сайта. Веб-страница может быть создана из одного HTML-файла или из сложной сборки ресурсов. Если вы хотите разместить свое веб-приложение в сети, то в большинстве случаев для этого потребуется веб-сервер.
Один из наиболее распространенных случаев использования веб-серверов — обслуживание файлов, которые необходимы для отображения сайта в браузере. При посещении http://www.8host.com вы начинаете с ввода URL-адреса, который запускает запрос через сеть. Запрос проходит через несколько уровней, одним или несколькими из которых является веб-сервер. Этот сервер генерирует ответ на ваш запрос, который в данном случае является сайтом 8host, а именно домашней страницей. В идеале это происходит быстро и с доступностью 24/7.
Любой посетитель домашней страницы 8host будет видеть ее как одну страницу, но на самом деле большинство современных страниц являются комбинацией многих ресурсов. Веб-серверы выступают в качестве посредника между бэкендом и фронтендом, обслуживая ресурсы: HTML и CSS, данные JSON — все это генерируется динамически на ходу или обслуживается статически. Если вы собираетесь работать с сайтами или онлайн-приложениями, вам будет полезно ознакомиться с основами веб-сервера и понять, как он работает.
Термин “веб-сервер” может относиться как к самому программному обеспечению, так и к оборудованию, на котором оно установлено, — в этой статье речь идет именно о ПО.
Читайте также: Облачный хостинг: основы работы с серверами
Общие случаи использования веб-серверов
Веб-сервер обрабатывает запросы в сети по протоколам HTTP и HTTPS, потому он также называется HTTP-сервером. Веб-сервер отличается от других типов серверов тем, что он специализируется на обработке HTTP и HTTPS запросов, потому он не похож на серверы приложений (например, Gunicorn) и серверы для других протоколов (например, WSGI). Другие типы серверов работают как посредники для бэкенд-языков программирования через внешние библиотеки, что представляет собой другой уровень абстракции по сравнению с веб-серверами.
Основные задачи, которые выполняют веб-серверы:
- Сервер статических файлов HTML, CSS и JavaScript.
- Сервер изображений и видео.
- Обработка сообщений об ошибках HTTP.
- Обработка пользовательских запросов, часто параллельно.
- Маршрутизация и перезапись URL.
- Обработка и обслуживание динамического контента.
- Сжатие контента для оптимизации использования данных и скорости.
- Активация кэширования браузера статического контента.
Некоторые персональные проекты, в которых может потребоваться использование веб-сервера:
- Создание сайта.
- Создание приложения, которое подключается к сети.
Этот список далеко не полный и веб-сервер не ограничен в типах данных, которые он может предоставлять конечному пользователю. Например, веб-сервер, который обрабатывает запросы веб-API, часто отвечает данными в формате JSON.
Задачи веб-сервера
Веб-серверы обслуживают аудиторию, которой нужна скорость, доступность, надежность и т. д. Их общая цель — обслуживание контента в сети. Чтобы считаться эффективным, веб-сервер должен учитывать следующие аспекты:
- Время безотказной работы: это время, в течение которого веб-сервер находится в режиме онлайн и работает. Сайты должны постоянно находиться в сети, чтобы обслуживать пользователей, поэтому обеспечить высокое время работы очень важно. Это также стабильность и предсказуемость. Когда пользователь вводит URL-адрес или переходит по ссылке на ваш сайт, ожидаемая страница должна загружаться каждый раз и в любое время. Исключением должны быть только запланированные простои для обновления или технического обслуживания. Веб-сервер с ошибками или сбоями в произвольные моменты негативно влияет на посещаемость.
- Скорость: страницы должны загружаться максимально быстро. Пользователи хотят, чтобы их запросы выполнялись немедленно, иначе вы рискуете потерять их. Если страница загружается медленно, то даже если пользователь выдержит первую загрузку, каждая последующая будет снижать его желание остаться или посетить ее снова.
- Конкуренция: это относится к обработке нескольких запросов, поступающих одновременно. Кажется, что это хорошо, если очень много людей пытаются посетить ваш сайт одновременно, но это становится настоящей проблемой, когда время загрузки увеличивается и весь сервер перегружается. Физический или виртуальный сервер имеет ограниченное количество ресурсов (RAM и вычислительная мощность CPU), их следует использовать эффективно.
- Масштабируемость: это либо усиление мощности существующих серверов через вертикальное масштабирование, либо добавление новых серверов через горизонтальное масштабирование. По мере роста аудитории настанет момент, когда вам понадобится более одного или двух небольших веб-серверов.
- Простота настройки: быстрая установка и запуск — ключевой момент в развитии проекта. Простой и повторяющийся процесс установки важен как для первого настроенного веб-сервера, так и для нескольких серверов после масштабирования
- Документация: веб-серверы сложны. В сети доступны готовые настройки для популярных случаев использования, которые помогут вам быстро начать работу, но со временем ваши потребности будут расти. Вам понадобятся функции, которые используются не так часто. Когда это произойдет, качественная документация будет очень важна для создания настроек, соответствующих вашим потребностям.
- Поддержка разработчиков: если разработчики ядра не поддерживают свой проект, вам не стоит связываться ним. Сюда относятся как планы по долгосрочной поддержке для своего программного обеспечения, так и немедленная краткосрочная поддержка, которую они обеспечивают в форме исправлений ошибок и патчей.
- Поддержка комьюнити: основная команда разработчиков выполняет большую часть работы, а развивающееся сообщество помогает заполнить пробелы. В открытых проектах комьюнити делает существенный вклад в фактическую кодовую базу, но также хорошее комьюнити ответит на вопросы и поможет с конкретными проблемами.
Выбор веб-сервера
На сегодняшний день самые популярные веб-серверы с открытым исходным кодом — Apache и Nginx.
Apache появился первым и был создан в то время, когда несколько сайтов зачастую размещались на одном веб-сервере, имея при этом индивидуальные файлы конфигурации. Nginx появился позже, когда потребности переключились на обслуживание одного сайта на одном сервере с крайне эффективной обработкой нагрузок.
У веб-серверов одинаковые цели и проблемы, но каждое решение будет уникальным в своей интерпретации и реализации. Nginx и Apache выделены здесь только благодаря их популярности. При выборе сервера важно помнить о потребностях конкретного проекта. Следовательно, даже если ситуация на рынке веб-серверов изменится, требования проекта всегда должны оставаться главным ориентиром при выборе ПО.
Вот некоторые ключевые отличия в работе веб-серверов:
Структура конфигурационных файлов
Настройки веб-серверов хранятся в файлах конфигурации, которые можно редактировать для создания пользовательской настройки. Хранение и организация файлов конфигурации — это структурный вопрос, который отличает продукты веб-серверов друг от друга.
Основное различие заключается между централизованной и децентрализованной конфигурацией. Децентрализованные файлы предоставляют высокий уровень контроля на уровне файловой системы, что связано с необходимостью размещения нескольких сайтов на одном сервере. Централизованная конфигурация нацелена на обслуживание одного сайта и основана на сопоставлении шаблонов URI, а не на структуре каталогов веб-сервера.
Файлы .htaccess в Apache упрощают децентрализованную конфигурацию как функцию, и каждое решение проектирования следует из этого фокуса на файловой системе, которую легко контролировать до мельчайших деталей. Nginx сосредоточен на подборе URI-шаблонов и централизованной конфигурации.
Управление параллелизмом
Физические и виртуальные серверы, на которых запускаются веб-серверы, имеют ограниченные ресурсы (RAM и CPU). То, как ваш веб-сервер управляет запросами, будет иметь наибольшее влияние на их эффективное использование. Один запрос может запускать целый процесс или же он может обрабатываться на основе событий. Способность веб-сервера эффективно обрабатывать несколько одновременных запросов зависит от фундаментальных проектных решений.
Apache обрабатывает запросы, запуская процессы, и потребляет ресурсы с такой скоростью, что может стать проблемой при большой нагрузке. В Nginx присутствует асинхронная обработка событий, что позволяет более эффективно обрабатывать множество запросов и использовать меньше ресурсов.
Обслуживание статического контента
Помимо страниц, веб-серверы получают запросы на другие ресурсы: изображения, видео, файлы CSS и JavaScript. Поскольку эти элементы всегда одинаковы, независимо от того, кто их запрашивает, то такой тип контента называется статическим. Часто сама веб-страница является HTML-файлом, который не настраивается для каждого запроса и также рассматривается как статический контент. Веб-серверы могут сжимать статический контент для более быстрой загрузки.
Nginx отлично справляется с обслуживанием статического контента благодаря обработке запросов на основе событий. Apache также может обслуживать статический контент, но не всегда с такой же скоростью и эффективностью при большой нагрузке, как Nginx.
Обслуживание динамического контента
Когда контент изменяется, обрабатывается и настраивается в зависимости от того, кто его запрашивает, он называется динамическим. Например, после входа на сайт часто ваше имя пользователя динамически добавляется в верхнюю панель навигации. Динамический контент представляет дополнительную сложность, поскольку заставляет веб-сервер обрабатывать множество запросов в момент их получения. Контент, адаптированный под каждый запрос, не может быть предоставлен всем и не может быть универсально закэширован.
Внутренняя обработка динамического контента удаляет дополнительный уровень абстракции, который обычно требует передачи запроса внешней библиотеке. Apache изначально реализует динамическую обработку контента с популярными стеками решений, например LAMP (Linux, Apache, MySQL, PHP). Nginx более независим от языка, но требует внешних библиотек, таких как PHP-FPM, чтобы действовать как аналогичное решение для таких случаев использования, как стек LAMP.
Возможность обратного проксирования
Обратный прокси-сервер находится перед традиционным веб-сервером и является посредником, который направляет трафик HTTP-запросов на веб-серверы за ним. Обратный прокси становится шлюзом, который направляет трафик между веб-серверами и сетью в целом, и часто является уровнем, который напрямую взаимодействует с брандмауэром. Большинство веб-серверов имеют возможность обратного проксирования, но Nginx был создан и оптимизирован с нуля, чтобы быть надежным обратным прокси.
Важность Nginx во многом зависит от его функций и эффективности обратного прокси. Многие серверные установки размещают несколько традиционных веб-серверов за обратным прокси-сервером Nginx, с помощью него определяя уровень, на какой сервер отправлять запрос, в зависимости от нагрузки или конфигурации правил. Эта роль посредника позволяет ему даже работать в паре с Apache в некоторых установках, выступая в качестве обратного прокси перед традиционным сервером Apache.
Поддержка экосистемы
Nginx и Apache широко поддерживаются разработчиками и комьюнити. Благодаря их популярности существует множество обучающих материалов. Apache поддерживается некоммерческой организацией и всегда будет бесплатным. Ядро Nginx имеет открытый исходный код, но некоторые функции доступны только в платном продукте Nginx Plus: проверка работоспособности, сохранение сессий и расширенный мониторинг.
Альтернативы традиционному веб-серверу
Если вам нужен сервер, готовый в любой момент ответить на входящий HTTP-запрос, то веб-сервер лучше всего справляется с этой задачей. Чем дальше вы уходите от обслуживания HTTP запросов, тем менее идеальным решением становятся веб-серверы. Особенно это касается дополнительных функций веб-серверов. Например, кэширование может эффективнее обрабатываться на уровне обратного прокси или CDN, в зависимости от конфигурации.
Кроме того, поскольку разработчики сместили приоритеты в выделении ресурсов на управление веб-серверами, в ответ появились такие решения: serverless (безсерверные), headless (автомномные) CMS и Jamstack. Они не требуют размещения веб-сервера, а вместо этого перенаправляют уровень сервера на внешние сервисы. Для разработчиков, которым не требуется детальный или расширенный контроль над уровнем веб-сервера, время разработки может быть сосредоточено в другом месте.
Заключение
В этой статье вы ознакомились с основными принципами работы веб-серверов, их использованием и проблемами, которые они пытаются решить. С помощью этих знаний вы сможете найти средство, которое подходит вашему проекту лучше остальных.