Типичный общедоступный веб-сайт ASP.NET, размещенный на IIS, обычно настраивается таким образом, чтобы сервер, на котором установлен IIS, был виден общедоступному Интернету. HTTP-запросы от браузера или клиента веб-службы направляются непосредственно в IIS, где также размещается рабочий процесс ASP.NET. Все функции, необходимые для создания веб-сайта, реализованы на одном сервере. Это включает кэширование, завершение SSL, аутентификацию, обслуживание статических файлов и сжатие. Этот подход прост и понятен для небольших сайтов, но его трудно масштабировать как с точки зрения производительности, так и с точки зрения управления сложностью большого сложного приложения. Это особенно верно, если у вас распределенная сервис-ориентированная архитектура с несколькими конечными точками HTTP, которые часто появляются и исчезают.
Обратный прокси-сервер — это компонент сервера, который находится между Интернетом и вашими веб-серверами. Он принимает запросы HTTP, предоставляет различные услуги и перенаправляет запросы на один или несколько серверов.
Наличие точки, в которой вы можете проверять, преобразовывать и направлять HTTP-запросы до того, как они достигнут ваших веб-серверов, дает целый ряд преимуществ. Вот некоторые:
Балансировки нагрузки
Это функция обратного прокси, с которой люди лучше всего знакомы. Здесь прокси направляет входящие HTTP-запросы на несколько идентичных веб-серверов. Это может работать по принципу простого циклического перебора или если у вас есть полнофункциональные веб-серверы (лучше этого не делать), доступны балансировщики нагрузки с учетом сеансов. Это настолько распространенная функция, что обратные прокси-серверы с балансировкой нагрузки обычно называются «балансировщиками нагрузки». Доступны специализированные продукты для балансировки нагрузки, но многие обратные прокси общего назначения также предоставляют функции балансировки нагрузки.
Безопасность
Обратный прокси-сервер может скрывать топологию и характеристики ваших внутренних серверов, устраняя необходимость прямого доступа к ним через Интернет. Вы можете разместить свой обратный прокси-сервер в демилитаризованной зоне Интернета, но скрыть свои веб-серверы в закрытой подсети.
Аутентификация
Вы можете использовать свой обратный прокси-сервер для обеспечения единой точки аутентификации для всех HTTP-запросов.
Прекращение SSL
Здесь обратный прокси-сервер обрабатывает входящие HTTPS-соединения, расшифровывает запросы и передает незашифрованные запросы на веб-серверы. Это имеет несколько преимуществ:
- Устраняет необходимость устанавливать сертификаты на многих внутренних веб-серверах.
- Предоставляет единую точку настройки и управления для SSL / TLS
- Снимает нагрузку обработки шифрования / дешифрования HTTPS-трафика с веб-серверов.
- Упрощает тестирование и перехват HTTP-запросов к отдельным веб-серверам.
Обслуживание статического контента
Не строго говоря, «обратное проксирование» как таковое. Некоторые обратные прокси-серверы также могут выступать в качестве веб-серверов, обслуживающих статический контент. Средняя веб-страница часто может состоять из мегабайт статического содержимого, такого как изображения, файлы CSS и файлы JavaScript. Разделяя их по отдельности, вы можете получить значительную нагрузку с внутренних веб-серверов, предоставляя им возможность рендеринга динамического контента.
Кэширование
Обратный прокси-сервер также может действовать как кэш. У вас может быть тупой кеш, срок действия которого просто истекает через заданный период, или, что еще лучше, кеш, который учитывает заголовки Cache-Control и Expires. Это может значительно снизить нагрузку на внутренние серверы.
компрессия
Чтобы уменьшить пропускную способность, необходимую для отдельных запросов, обратный прокси-сервер может распаковывать входящие запросы и сжимать исходящие. Это уменьшает нагрузку на внутренние серверы, которые в противном случае должны были бы выполнять сжатие, и облегчает отладку запросов и ответов от внутренних серверов.
Централизованная регистрация и аудит
Поскольку все HTTP-запросы направляются через обратный прокси-сервер, это является отличной отправной точкой для ведения журнала и аудита.
Перезапись URL
Иногда схема URL, которую представляет унаследованное приложение, не идеальна для поиска или поисковой оптимизации. Обратный прокси-сервер может перезаписывать URL-адреса перед их передачей на внутренние серверы. Например, устаревшее приложение ASP.NET может иметь URL-адрес для продукта, который выглядит следующим образом:
http://www.myexampleshop.com/products.aspx?productid=1234
Вместо этого вы можете использовать обратный прокси-сервер для представления оптимизированного для поисковых систем URL:
http://www.myexampleshop.com/products/1234/lunar-module
Объединение нескольких веб-сайтов в одно и то же пространство URL
В распределенной архитектуре желательно иметь разные функциональные возможности, обслуживаемые изолированными компонентами. Обратный прокси-сервер может маршрутизировать разные ветви одного адресного пространства URL-адресов на разные внутренние веб-серверы.
Например, скажем, у меня есть три внутренних веб-сервера:
http://products.internal.net/
http://orders.internal.net/
http://stock-control.internal.net/
Я могу направить их из одного внешнего домена, используя мой обратный прокси-сервер:
http://www.example.com/products/ -> http://products.internal.net/
http://www.example.com/orders/ -> http://orders.internal.net/
http://www.example.com/stock/ -> http://stock-control.internal.net/
Внешнему клиенту кажется, что он просто перемещается по одному веб-сайту, но внутри организации поддерживается три совершенно отдельных сайта. Этот подход может очень хорошо работать для API-интерфейсов веб-служб, где обратный прокси-сервер обеспечивает согласованный единый общий фасад для архитектуры, ориентированной на внутренние распределенные компоненты.
Так …
Таким образом, обратный прокси-сервер может снизить нагрузку на инфраструктуру распределенного веб-приложения большого объема.
В настоящее время мы ищем Nginx для этой роли. Ожидайте несколько практических постов, связанных с Nginx, о том, как сделать некоторые из этих вещей в самое ближайшее время.
Удачного проксирования!