Введение
Основная роль веб-сервера заключается в обслуживании веб-страниц для веб-сайта. Веб-страница может быть отрендерена из одного HTML-файла или сложной подборки ресурсов. Если вы хотите разместить свое веб-приложение в интернете, в многих случаях вам потребуется веб-сервер.
Один из наиболее распространенных случаев использования веб-серверов — это обслуживание файлов, необходимых для отображения веб-сайта в браузере. Когда вы заходите на http://www.digitalocean.com
, вы начинаете с ввода URL, который запускает запрос через интернет. Этот запрос проходит через несколько уровней, один или несколько из которых будут веб-серверами. Этот веб-сервер генерирует ответ на ваш запрос, который в данном случае является веб-сайтом DigitalOcean, конкретно главной страницей. Идеально, это происходит быстро и с доступностью 24/7.
Хотя любой посетитель главной страницы DigitalOcean будет видеть ее как одну веб-страницу, на самом деле большинство современных веб-страниц сегодня являются комбинацией многих ресурсов. Веб-серверы выступают посредниками между бэкендом и фронтендом, обслуживая ресурсы, такие как HTML и CSS файлы, а также JSON данные, все из которых генерируются динамически на лету или обслуживаются статически. Если вы планируете работать с веб-сайтами или онлайн-приложениями в любом качестве, очень полезно ознакомиться с основами того, что такое веб-сервер, и как он работает.
Термин “веб-сервер” может относиться как к программному обеспечению, так и к оборудованию, на котором оно существует, но в этой статье речь идет именно о программном обеспечении веб-сервера. Для получения более подробной информации о этой разнице обратитесь к нашему введению в облачные серверы.
Общие случаи использования
Веб-сервер обрабатывает запросы в интернете через протоколы HTTP и HTTPS и также называется HTTP-сервером. Веб-сервер отличается от других типов серверов тем, что специализируется на обработке этих HTTP и HTTPS запросов, что отличает его от серверов приложений (например, Gunicorn) и серверов для других протоколов (т.е. WSGI). Эти другие серверы работают как посредники для языков программирования бэкенда через внешние библиотеки, что представляет собой другой уровень абстракции, чем у веб-серверов.
Вот некоторые общие задачи, выполняемые веб-серверами:
-
– Обслуживает HTML, CSS и JavaScript файлы.
- – Обслуживает изображения и видео.
- – Обрабатывает сообщения об ошибках HTTP.
- – Обрабатывает запросы пользователей, часто одновременно.
- – Руководит сопоставлением URL и их перезаписью.
- – Обрабатывает и обслуживает динамическое содержимое.
- – Сжимает содержимое для оптимизации использования данных и скорости.
- – Включает кэширование браузера для ваших статических данных.
В практическом плане вот несколько личных проектов, которые требуют использования веб-сервера:
- Вы хотите создать веб-сайт.
- Вы хотите создать приложение, которое подключается к интернету.
Этот список не является исчерпывающим, и веб-сервер не ограничен строго в типах данных, которые может предоставлять конечному пользователю. Например, веб-сервер, обслуживающий запросы веб API, часто отвечает данными в формате, таком как JSON.
Цели веб-сервера
Веб-серверы должны удовлетворять ожиданиям пользователей по скорости, доступности, надежности и т. д. Они имеют общую цель — обслуживать контент в интернете, и чтобы считаться жизнеспособным решением в качестве веб-сервера, следует учитывать следующие аспекты:
- Время работы (uptime): Это время, в течение которого веб-сервер находится в сети и работает. Веб-сайты должны быть доступны круглосуточно, чтобы обслуживать пользователей, поэтому цель — максимальное время работы. Это также означает стабильность и предсказуемость. Когда пользователь вводит URL или нажимает ссылку на ваш веб-сайт, ожидаемая страница должна загружаться каждый раз и в любое время. Единственные исключения должны быть плановыми простоями для обновлений или обслуживания. Веб-сервер, который часто вылетает или crashит в случайные моменты, негативно влияет на пользовательский опыт.
- Скорость: Ваши веб-страницы должны загружаться как можно быстрее. Пользователи хотят, чтобы их запросы выполнялись мгновенно, в противном случае вы рискуете потерять их. На медленно загружающейся веб-странице даже если пользователь выдержит первую загрузку, каждая последующая долгая загрузка будет экспоненциально уменьшать их готовность оставаться или вернуться снова.
- Конкурентность: Это относится к обработке нескольких запросов, поступающих одновременно. Если слишком много людей пытаются посетить ваш веб-сайт одновременно, это может показаться хорошей вещью, но это становится реальной проблемой, когда время загрузки замедляется до медленного течения, и весь сервер выходит из строя. Ваш физический или виртуальный сервер имеет ограниченные ресурсы, такие как ОЗУ и производительность ЦП, и веб-серверы должны использовать эти ресурсы эффективно.
- Масштабируемость: Масштабируемость относится к увеличению мощности ваших существующих серверов через вертикальное масштабирование или добавлению большего количества серверов в вашу конфигурацию через горизонтальное масштабирование. По мере роста вашей аудитории вы можете достичь точки, когда вам понадобится больше одного или двух маленьких веб-серверов.
- Простота настройки: Быстрая настройка проекта и запуск являются ключевыми для итерации вашего проекта. Прямолинейный и повторяющийся процесс установки важен как для первого веб-сервера, так и для последующих множества веб-серверов при масштабировании.
- Документация: Веб-серверы сложны. Самые распространенные настройки быстро помогут вам начать, но ваши потребности будут расти с течением времени. Часто вам понадобятся функции, которые используются не так часто. В такие моменты хорошая документация является незаменимой для создания自定义 решений для ваших потребностей.
- Поддержка разработчиков: Если основные разработчики не привержены своему собственному проекту, вы не должны привязывать свой проект к ихс. Это включает как планы на долгосрочную поддержку их программного обеспечения, так и немедленную краткосрочную поддержку, которую они предоставляют в виде исправлений ошибок и патчей.
- Поддержка сообщества: Основная команда разработчиков будет выполнять большую часть тяжелой работы, но процветающее сообщество помогает заполнять пробелы. В случае с открытыми исходными проектами это может означать вклад в саму кодовую базу, но сильное сообщество также будет отвечать на ваши вопросы и помогать с конкретными проблемами.
Хотя веб-серверы могут предлагать различные решения, предлагаемые ими решения исходят из попыток решить те же самые проблемы. Эти проблемы сами по себе эволюционируют вместе с потребностями и ожиданиями конечного пользователя, делая этот список живым и постоянно развивающимся.
Выбор решения для веб-сервера
На данный момент наиболее популярными открытыми исходными веб-серверами являются 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.
Возможности обратного прокси
Реверсивный прокси-сервер располагается перед традиционным веб-сервером, становясь промежуточным сервером, который направляет трафик HTTP-запросов к веб-серверам, находящимся за ним. Реверсивный прокси становится шлюзом, который направляет трафик между веб-серверами и всем интернетом, и часто является слоем, который напрямую взаимодействует с брандмауэром. Хотя большинство веб-серверов имеют возможности реверсивного прокси, Nginx был создан и оптимизирован с нуля для того, чтобы быть надежным реверсивным прокси-сервером.
Важность Nginx в реальном использовании основывается на его функциях реверсивного прокси и эффективности. Во многих конфигурациях серверов несколько традиционных веб-серверов размещены за Nginx реверсивным прокси, используя Nginx для определения, к какому веб-серверу отправить запрос, на основе нагрузки или конфигурации правил. Эта промежуточная роль позволяет ему даже работать в паре с Apache в некоторых конфигурациях, располагаясь в качестве реверсивного прокси перед традиционным веб-сервером Apache.
Экосистема поддержки
Nginx и Apache получают большую поддержку от своих соответствующих команд разработчиков и сообществ. Будучи самыми популярными open source веб-серверами, ресурсы для обучения обильны. Apache поддерживается Apache, некоммерческой организацией, и всегда будет бесплатным для использования. Основная часть Nginx является open source, но желаемые функции закрыты за их продуктом Nginx Plus, который предлагает такие функции, как проверка состояния upstream, устойчивость сессий и расширенный мониторинг.
Альтернативы традиционному веб-серверу
Если вам нужен сервер, который в любой момент готов отвечать на входящий HTTP-запрос, то для этой задачи лучше всего подходит веб-сервер. Если вы отклоняетесь от фокуса на обслуживании HTTP-запросов, веб-серверы становятся менее идеальным решением. Это особенно верно для вспомогательных функций, которые предоставляют веб-серверы. Например, функции такие как кэширование могут быть более эффективно обработаны на уровне обратного прокси или CDN, в зависимости от настройки.
Кроме того, по мере как разработчики изменяли свои приоритеты, направляя ресурсы на разработку для управления веб-серверами, появились такие решения, как безсерверные架构, безголовые CMS и Jamstack. Эти решения не требуют самостоятельного хостинга веб-сервера, абстрагируя слой веб-сервера на внешние сервисы. Разработчики, которым не требуется гранулярный или продвинутый контроль над слоем веб-сервера, могут сосредоточиться на других аспектах разработки. Для получения дополнительной информации проверьте эту статью о Jamstack с безголовым CMS или внедрении полного стека Jamstack с помощью платформы App DigitalOcean.
Заключение
В этой статье вы прошли базовый курс о том, что такое веб-серверы, для чего они используются и какие проблемы они решают. Обладая этими знаниями, вы погрузились в текущую ландшафтную карту решений для веб-серверов и применили свои знания для поиска решения, которое идеально подходит именно вам. Чтобы узнать больше о том, как настроить и использовать веб-сервер, обратитесь к остальным материалам нашей серии Cloud Curriculum о веб-серверах.
Дополнительные ресурсы
Руководства:
- Как установить Apache: Пошаговые инструкции по настройке вашего первого сервера Apache. Это решение превосходит в децентрализованной конфигурации для точного управления и внутренней обработке динамических веб-страниц с поддержкой популярных языков программирования, таких как PHP.
- Как установить Nginx: Пошаговые инструкции по настройке вашего первого сервера Nginx. Это решение превосходит в централизованной конфигурации, обслуживании статических активов, функционировании в качестве обратного прокси и обработке высоконагруженного трафика.
- Apache vs Nginx: Практические рассмотрения: Более глубокий анализ двух основных игроков в ландшафте веб-серверных решений.
Продукты DigitalOcean:
- DigitalOcean Droplets: Виртуальные частные серверы для тестирования и развертывания веб-серверов.
- DigitalOcean Functions: Безсерверное решение, которое может стать альтернативой виртуальным частным серверам. Пропустите уход за серверами, сосредоточьтесь на вашем коде приложения.
Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction