Введение
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 (Lинукс, 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, в зависимости от настройки.
Кроме того, по мере того как разработчики перенаправляют свои приоритеты на управление веб-серверами, появились решения, такие как серверы без сервера, CMS без интерфейса и Jamstack. Эти решения не требуют самостоятельного хостинга веб-сервера, а абстрагируют уровень веб-сервера к внешним сервисам. Для разработчиков, которым не требуется детальное или расширенное управление уровнем веб-сервера, время разработки можно сосредоточить на других задачах. Дополнительную информацию можно найти в статье о Jamstack с CMS без интерфейса или внедрении полного стека Jamstack с платформой приложений DigitalOcean.
Заключение
В этой статье вы ознакомились с основами того, что такое веб-серверы, как они используются и с какими проблемами они пытаются справиться. Вооружившись этими знаниями, вы погрузились в текущий ландшафт решений для веб-серверов и применили свои знания для поиска решения, которое соответствует вашим конкретным потребностям. Чтобы узнать больше о том, как настроить и использовать веб-сервер, ознакомьтесь с остальной частью нашей серии облачного курса по веб-серверам.
Дополнительные ресурсы
Учебные пособия:
- Как установить Apache: Пошаговые инструкции по настройке вашего первого сервера Apache. Это решение отличается децентрализованной конфигурацией для тонкой настройки и внутренней обработкой динамических веб-страниц с возможностью интеграции с популярными языками программирования, такими как PHP.
- Как установить Nginx: Пошаговые инструкции по настройке вашего первого сервера Nginx. Это решение отличается централизованной конфигурацией, обслуживанием статических ресурсов, выступая в качестве обратного прокси и обработкой высоконагруженного трафика.
- Apache против Nginx: Практические соображения: Более подробное рассмотрение двух основных игроков в ландшафте решений для веб-серверов.
Продукты DigitalOcean:
- Облако DigitalOcean: Виртуальные частные серверы для тестирования и развертывания веб-серверов.
- Функции DigitalOcean: Бессерверное решение, которое может быть альтернативой виртуальным частным серверам. Откажитесь от обслуживания серверов, сосредоточьтесь на коде вашего приложения.
Source:
https://www.digitalocean.com/community/conceptual-articles/introduction-to-web-servers