Резюме
существует详解http报文В соответствующей статье мы рассказали, как работает протокол http, какие компоненты нам нужно ввести для создания реального веб-сайта?Что означают некоторые общие термины?
- Что такое прямой прокси и что такое обратный прокси
- Различия между сервисным прокси и балансировкой нагрузки
- С nginx, зачем вам LVS?
- Какие существуют методы балансировки нагрузки
эволюция сервера
В предыдущей статье мы представили простейший режим ответа клиент-сервер, а именно:
Это простейшая форма службы 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), когда объем запросов увеличивается и спрос модернизируется, для его решения необходимо ввести промежуточный уровень. Когда требования к определенному модулю увеличиваются, его необходимо отделить от отдельного модуля, чтобы справиться с ним.
Таким образом, на рисунке ниже показана архитектура сервера среднего размера.
Ссылаться на
Блог Woohoo.cn на.com/want baby/afraid/78…
Обратите внимание на публичный аккаунт [Abbot's Temple], как можно скорее получите обновление статьи и начните путь технической практики вместе с аббатом
Связанное ЧтениеПодробное http-сообщение
Подробное объяснение http-пакетов (2) — как веб-контейнер анализирует http-пакеты