эволюция архитектуры HTTP-сервера

Архитектура

Резюме

существует详解http报文В соответствующей статье мы рассказали, как работает протокол http, какие компоненты нам нужно ввести для создания реального веб-сайта?Что означают некоторые общие термины?

  1. Что такое прямой прокси и что такое обратный прокси
  2. Различия между сервисным прокси и балансировкой нагрузки
  3. С nginx, зачем вам LVS?
  4. Какие существуют методы балансировки нагрузки

эволюция сервера

В предыдущей статье мы представили простейший режим ответа клиент-сервер, а именно:

Это простейшая форма службы http, а сервер — это уровень веб-сервера.

Теперь наш сервер стал сложнее, количество пользователей увеличилось, а объем параллелизма увеличился. Повышенные требования к нашему серверу

  • Возможности обслуживания: сервер не может удовлетворить такое количество http-запросов. Нам нужно добавить машины и расширить сервис
  • Защита безопасности: некоторые люди начали сетевые атаки на наши сервисы, нам нужно защитить сервер сервера и ограничить IP-адрес.
  • Обновление веб-сайта: после того, как веб-сайт будет подключен к сети, он должен обеспечить бесперебойную работу в течение 7 * 24 часов.Чтобы выпустить новую версию, необходимо обеспечить доступность веб-сайта.

Прокси-сервис

Для решения этих задач необходимо ввести中间层То есть прокси, вставляющий промежуточное звено между клиентом и сервером, прокси-сервис. Прокси, в узком смысле, не производит контент, а только перенаправляет восходящие и нисходящие запросы и ответы.

Прокси-сервисы можно разделить на две категории в зависимости от того, являются ли они анонимными или нет.

  • Анонимный прокси: внешний мир не знает реальной машины, только прокси-сервер
  • Прозрачный прокси: внешний мир знает прокси и настоящий сервер

В зависимости от того, находится ли он рядом с клиентом или сервером, он делится на

  • Форвардный прокси: прокси-клиент, от имени клиента отправляющий запросы на сервер
  • Обратный прокси: прокси-сервер, который отправляет запросы клиенту от имени сервера.

Поддержка прокси для http протокола

С начала протокола HTTP не рассматривала агентские услуги, проектирование протокола только для модели клиента - сервера. Согласно нашей обычной стандартной архитектуре, слой протокола HTTP не обеспокоен тем, как используется пользователь, агентские услуги не считают этот промежуточный характер. IP-адрес сервера получают потребности клиента, поэтому прокси-программное обеспечение кэширования SQUID было впервые представленоX-Forwarded-ForПоле заголовка, используемое для указания реального IP-адреса клиента.

Формат следующий, от клиента к каждому прокси-сервису, запись переадресации каждого слоя

X-Forwarded-For: client, proxy1, proxy2

Это требование настолько универсально, что постепенно стало стандартом и широко использовалось различными прокси-сервисами, поэтому позднее было прописано вRFC 7239стандартный

Агентское соглашение

Сам протокол HTTP ничего не говорит о прокси-сервисе, поэтому прокси-протокол является производным.Протокол прокси-это интернет-протокол, разработанный и разработанный Вилли Тарро, автором haproxy, в 2010 году. , Удобная передача информации о клиенте (стек протоколов, IP-адрес источника, IP-адрес назначения, порт источника, порт назначения и т. д.), что очень полезно, когда сетевая ситуация является сложной и необходимо получить IP-адрес клиента.

  • Многослойная сеть NAT
  • TCP-прокси (четыре) или многоуровневый агент tcp
  • https обратный прокси http (x-forword-for не передается каждый запрос из-за Keep-alive в некоторых случаях)
  • Связь HTTPS зашифрована, и исходное сообщение не может быть изменено.

Кроме того, поскольку каждый уровень прокси-сервиса должен анализировать заголовок httpX-Forwarded-For, а затем добавьте свой собственный адрес, поэтому стоимость относительно высока. Таким образом, соглашение о доверенности также становится刚需, Хотя он был предложен haproxy, он также поддерживается основными прокси-серверами, такими как nginx, apache и squid. Формат прокси-протокола

PROXY TCP4/TCP6 客户端ip 应答方ip 请求方端口号  应答方端口号 \r\n

Таким образом, запросчик может получить IP-адрес клиента, проанализировав первую строку, и ему больше не нужно обрабатывать http-сообщение.

Балансировка нагрузки

Балансировка нагрузки, по сути, заключается в распределении запросов. Согласно семиуровневому протоколу OSI

Существует два типа балансировки нагрузки

  • Балансировка нагрузки уровня 4, то есть работа на транспортном уровне четвертого уровня, использование порта IP-адреса для переадресации запросов, поскольку других операций нет, поэтому эффективность относительно высока.
  • Балансировка нагрузки уровня 7, то есть работа на уровне приложений седьмого уровня, перенаправляет определенные хосты на основе заголовков HTTP-запросов и информации URL. Эффективность относительно низкая.

Nginx — это 4-уровневая балансировка нагрузки, а LVS — 7-уровневая балансировка нагрузки.

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

Что касается конкретного алгоритма балансировки нагрузки,Обратитесь к этой статье, здесь повторяться не буду

Безопасность

Ранее мы упоминали, что защита безопасности также является важной функцией прокси-сервисов. Для борьбы с внешними атаками необходимо ввести сетевой брандмауэр WAF (брандмауэр веб-приложений). Работая на седьмом уровне OSI, в основном проводит более детальный аудит http-пакетов, то есть различных фильтров. Например

  • черный и белый список IP
  • DDOS-атака
  • различные инъекции

Когда требования к безопасности сервиса не такие высокие, или ROI развития бизнеса компании не такой высокий, мы обычно настраиваем какие-то правила на уровне nginx. Когда спрос повысится, мы представим специальную модель, такую ​​какModSecurity1. Когда требуются дальнейшие обновления, вводятся службы WAF, предоставляемые внешними поставщиками облачных услуг.

окончательная архитектурная форма

Эволюция архитектуры http-сервера аналогична эволюции архитектуры нашего отдельного приложения. Когда бизнес не сложный, его можно сделать с помощью одного модуля (например, Nginx), когда объем запросов увеличивается и спрос модернизируется, для его решения необходимо ввести промежуточный уровень. Когда требования к определенному модулю увеличиваются, его необходимо отделить от отдельного модуля, чтобы справиться с ним.

Таким образом, на рисунке ниже показана архитектура сервера среднего размера.

Ссылаться на

nuggets.capable/post/684490…

Блог Woohoo.cn на.com/want baby/afraid/78…

Обратите внимание на публичный аккаунт [Abbot's Temple], как можно скорее получите обновление статьи и начните путь технической практики вместе с аббатом

在这里插入图片描述

Связанное ЧтениеПодробное http-сообщение

Подробное объяснение http-пакетов (2) — как веб-контейнер анализирует http-пакеты