Введение в веб-серверы

Введение

A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.

Одним из наиболее распространенных случаев использования веб-серверов является обслуживание файлов, необходимых для отображения веб-сайта в браузере. Когда вы посещаете http://www.digitalocean.com, вы начинаете с ввода URL-адреса, который запускает запрос через интернет. Этот запрос проходит через несколько уровней, один или несколько из которых являются веб-серверами. Этот веб-сервер генерирует ответ на ваш запрос, который в данном случае является веб-сайтом DigitalOcean, конкретно – домашней страницей. Идеально, это происходит быстро и доступно 24/7.

Хотя любой посетитель домашней страницы DigitalOcean будет воспринимать ее как одну веб-страницу, на самом деле большинство современных веб-страниц сегодня являются комбинацией многих ресурсов. Веб-серверы выступают посредником между серверной частью и клиентской частью, обслуживая ресурсы, такие как HTML- и CSS-файлы, а также данные JSON, все это генерируется динамически на лету или обслуживается статически. Если вы намереваетесь работать с веб-сайтами или онлайн-приложениями в любом качестве, крайне полезно ознакомиться с основами того, что такое веб-сервер и как он работает.

Хотя термин “веб-сервер” может относиться как к самому программному обеспечению, так и к аппаратному обеспечению, на котором оно работает, в этой статье речь идет именно о программном обеспечении веб-сервера. Для получения более подробной информации об этой разнице ознакомьтесь с нашим введением в облачные серверы.

Общие случаи использования

A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.

Вот некоторые общие задачи, которые обрабатываются веб-серверами:

  • Обслуживание HTML-, CSS- и JavaScript-файлов.
  • Обслуживание изображений и видео.
  • Обработка сообщений об ошибках HTTP.
  • Обработка запросов пользователей, часто параллельно.
  • Направление сопоставления и переписывание URL-адресов.
  • Обработка и обслуживание динамического контента.
  • Сжатие контента для оптимизации использования данных и скорости.
  • Включение кэширования браузера для вашего статического контента.

На практике вот несколько личных проектов, которые потребуют использования веб-сервера:

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

Этот список далеко не исчерпывающий, и веб-сервер не строго ограничен типами данных, которые он может обслуживать конечному пользователю. Например, веб-сервер, который обслуживает запросы веб-API, часто отвечает данными в формате, таком как JSON.

Цели веб-сервера

Веб-серверы обслуживают аудиторию с ожиданиями скорости, доступности, надежности и других параметров. У них есть общая цель – обеспечить доступ к контенту в Интернете, и для того чтобы считаться приемлемым веб-сервером, необходимо учитывать следующие аспекты:

  • Время безотказной работы: Это относится к времени, когда веб-сервер находится в сети и функционирует. Веб-сайты должны быть доступны постоянно для обслуживания пользователей, поэтому высокое время безотказной работы является целью. Это также означает стабильность и предсказуемость. Когда пользователь вводит URL-адрес или нажимает на ссылку на вашем веб-сайте, ожидаемая страница должна загружаться каждый раз и в любое время. Единственным исключением должны быть запланированные периоды простоя для обновлений или обслуживания. Веб-сервер, который содержит ошибки или выходит из строя в случайные моменты, негативно сказывается на опыте ваших пользователей.
  • Скорость: Ваши веб-страницы должны загружаться как можно быстрее. Пользователи хотят, чтобы их запросы выполнялись немедленно, иначе вы рискуете их потерять. На медленной веб-странице, даже если пользователь дождется первой загрузки, каждая последующая долгая загрузка будет экспоненциально уменьшать их готовность оставаться или возвращаться снова.
  • Конкурентоспособность: Это относится к обработке нескольких запросов, поступающих одновременно. Кажется, что слишком много людей пытаются посетить ваш веб-сайт одновременно – это хорошо, но это становится реальной проблемой, когда время загрузки замедляется до скорости ползущей черепахи, и весь сервер выходит из строя. Ваш физический или виртуальный сервер имеет только определенное количество ресурсов, таких как оперативная память и вычислительная мощность процессора, и веб-серверы должны использовать эти ресурсы эффективно.
  • Масштабируемость: Масштабируемость относится либо к увеличению мощности ваших существующих серверов путем вертикального масштабирования, либо к добавлению большего количества серверов к вашей конфигурации через горизонтальное масштабирование. По мере роста вашей аудитории может возникнуть момент, когда вам понадобится больше, чем один или два небольших веб-сервера.
  • Простота настройки: Быстрый запуск проекта имеет ключевое значение для итерации вашего проекта. Простой и повторяемый процесс установки важен для первого веб-сервера, который вы настраиваете, и для множества веб-серверов после масштабирования.
  • Документация: Веб-серверы сложны. Самые распространенные настройки помогут вам быстро начать работу, но ваши потребности будут расти со временем. Зачастую вам понадобятся функции, которые не так часто используются. В этот момент хорошая документация необходима для создания пользовательских решений для ваших потребностей.
  • Поддержка разработчиков: Если основные разработчики не привержены своему собственному проекту, вам не стоит привязывать свой проект к их. Это включает как планы на долгосрочную поддержку их программного обеспечения, так и мгновенную краткосрочную поддержку, которую они предоставляют в виде исправлений ошибок и патчей.
  • Поддержка сообщества: Основная команда разработчиков будет осуществлять большую часть тяжелой работы, но процветающее сообщество помогает закрыть пробелы. В случае с проектами с открытым исходным кодом это может означать вклад в сам базовый код, но сильное сообщество также будет отвечать на ваши вопросы и помогать с вашими конкретными проблемами.

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

Выбор веб-серверного решения

Самые популярные открытые веб-серверы в настоящее время – это Apache и Nginx.

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

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

Вот некоторые ключевые отличия в том, как веб-серверы пытаются достичь целей веб-сервера:

Структура файлов конфигурации

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

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

Файлы .htaccess в Apache обеспечивают децентрализованную конфигурацию в качестве функции, и каждое проектировочное решение вытекает из этого фокуса на файловой системе с детализированным уровнем контроля. Nginx не обладает тем же фокусом на файловой системе и сосредотачивается на сопоставлении шаблонов URI и централизованной конфигурации.

Обработка параллельной работы

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

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

Обслуживание статического контента

Помимо веб-страниц, веб-серверы получают запросы на другие ресурсы, такие как изображения, видео, файлы CSS и файлы JavaScript. Поскольку эти элементы всегда одинаковы независимо от того, кто их запрашивает, этот тип контента называется статическим. Часто веб-страница сама по себе представляет собой простой файл HTML, который не настраивается для конкретного пользователя, и также рассматривается как статический контент. Веб-серверы также могут сжимать этот статический контент для улучшения времени загрузки.

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

Подача динамического контента

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

Обработка динамического контента внутренне устраняет дополнительный уровень абстракции, который обычно требует передачи запроса внешней библиотеке. Apache осуществляет встроенную обработку динамического контента, с популярными стеками решений, такими как LAMP (Linux, Apache, MySQL, PHP). Nginx более языково нейтрален, но требует внешних библиотек, таких как PHP-FPM, чтобы действовать как аналогичное решение для использования в стеке LAMP.

Возможность обратного прокси

A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.

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

Экосистема поддержки

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

Альтернативы традиционному веб-серверу

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

Кроме того, по мере того как разработчики переключили свои приоритеты на выделение ресурсов разработки для управления веб-серверами, появились решения, такие как serverless, headless CMS и Jamstack. Эти решения не требуют самостоятельного хостинга веб-сервера, а вместо этого абстрагируют уровень веб-сервера к внешним службам. Для разработчиков, которым не требуется детального или расширенного контроля над уровнем веб-сервера, время разработки можно сосредоточить на другом. Дополнительную информацию можно найти в этой статье о Jamstack с headless CMS или внедрении полного стека Jamstack с помощью платформы DigitalOcean’s App Platform.

Вывод

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

Дополнительные ресурсы

Учебные пособия:

  • Как установить Apache: Пошаговые инструкции по настройке вашего первого сервера Apache. Это решение отличается децентрализованной конфигурацией для мелкой настройки и внутренней обработкой динамических веб-страниц с возможностью интеграции с популярными языками программирования, такими как PHP.
  • Как установить Nginx: Пошаговые инструкции по настройке вашего первого сервера Nginx. Это решение отличается централизованной конфигурацией, обслуживанием статических ресурсов, действием в качестве обратного прокси и обработкой высокой нагрузки.
  • Apache против Nginx: практические соображения: Более подробный обзор двух основных игроков в ландшафте решений для веб-серверов.

Продукты DigitalOcean:

  • Цифровые капли DigitalOcean: Виртуальные частные серверы для тестирования и развертывания веб-серверов.
  • Функции DigitalOcean: Решение без серверов, которое может быть альтернативой виртуальным частным серверам. Пропустите обслуживание серверов, сосредоточьтесь на коде вашего приложения.

Source:
https://www.digitalocean.com/community/conceptual_articles/introduction-to-web-servers