Антон Зубов, .NET Engineer, Coherent Solutions & ISsoft
Системы безопасности редко находятся в центре внимания, хотя они этого заслуживают — особенно когда незаметно работают в фоновом режиме, обеспечивая защиту бэкенда и направляя трафик туда, куда нужно. В современных веб-приложениях эту работу зачастую выполняет обратный прокси-сервер. Он отвечает за маршрутизацию, балансировку нагрузки, согласование протоколов и многое другое.
YARP («Yet Another Reverse Proxy», или «еще один обратный прокси-сервер») — легковесное нативное решение для .NET с открытым исходным кодом, разработанное Microsoft. Это достаточно гибкий инструмент для реальных рабочих нагрузок, который дает команде полный контроль без необходимости задействовать DevOps для его поддержки.
В этой статье мы разберем, какие бывают прокси-серверы, что такое YARP, чем он отличается от классических решений вроде NGINX и как без лишних усилий внедрить его в свои .NET-проекты.
Что такое прокси?
Чтобы понять принцип работы обратного прокси, для начала определим, что такое прокси в принципе.
Антон Зубов, .NET Engineer, Coherent Solutions & ISsoft:
«Прокси-сервер выступает промежуточным звеном между двумя точками коммуникации — обычно это клиент (например, веб-браузер) и сервер. Весь обмен данными между ними проходит через прокси, что позволяет усилить безопасность, управлять трафиком и обеспечить анонимность запросов».
Прокси-серверы делятся на два основных типа: прямые и обратные. Обычно под словом «прокси» подразумевают именно прямой прокси.
Прямой прокси
Прямой прокси обычно располагается на стороне клиента. Он перехватывает запросы клиента, отправляет их в интернет и возвращает ответы сервера обратно.
Основные его задачи:
- Анонимизация запросов путем сокрытия данных клиента, таких как IP-адреса.
- Кэширование ответов для уменьшения задержек.
- Фильтрация контента и контроль доступа (например, блокировка определенных сайтов).
По сути, прямой прокси действует от имени клиента в его интересах.
Обратный прокси
Реверс-прокси, наоборот, работает на стороне сервера. Он получает запросы клиентов и пересылает их на соответствующий бэкенд-сервер. При этом клиенты обычно не знают о наличии прокси.
Существует множество причин использовать обратный прокси:
- Балансировка нагрузки: распределение запросов между несколькими серверами.
- Безопасность: сокрытие информации о внутренних серверах, защита их от прямого доступа из интернета и применение аутентификации на уровне прокси.
- Завершение SSL: обработка шифрования и дешифрования HTTPS.
- Кэширование: предоставление данных без обращения к бэкенду.
- Преобразование запросов и ответов: добавление необходимых данных для серверного приложения или удаление чувствительной информации из ответа клиенту.
- Ограничение частоты запросов: контроль числа одновременно отправляемых запросов для повышения надежности и производительности.
- Операционные задачи: дополнительное логирование, проверки состояния, контроль версий и т. д.
Другими словами, реверс-прокси действует от имени сервера, помогая защитить и оптимизировать серверные ресурсы.
Что такое YARP?
YARP — это функциональная .NET-библиотека, которая позволяет разработчикам легко настраивать реверс-прокси для API и веб-приложений. Она построена на конвейере промежуточного ПО ASP.NET Core, то есть работает как компонент внутри приложения ASP.NET Core.
Это значит, что YARP нельзя использовать как автономный прокси-сервер, но можно применять совместно с ASP.NET Core.
Сильной стороной YARP является гибкость: настройку можно выполнять как через код, так и через JSON-файлы:
- JSON-конфигурация подходит для простых или типовых прокси-сценариев и позволяет быстро и декларативно задать все параметры.
- Конфигурация через код дает больше возможностей для расширения и позволяет настраивать маршрутизацию, балансировку нагрузки и логику преобразования запросов/ответов на C#.
Благодаря модульной и расширяемой архитектуре YARP может обрабатывать широкий спектр типовых сценариев реверс-прокси, включая:
- Реализацию функций API-шлюза
- Балансировку нагрузки между бэкенд-сервисами
- Маршрутизацию на основе метаданных запроса
- Перезапись путей и заголовков
- Безопасность и фильтрацию запросов
Как работать с YARP
Покажем на практике, как создать простой обратный прокси с помощью YARP и ASP.NET Core.
Для начала добавьте пакет YARP в ваш проект.

Затем зарегистрируйте YARP с JSON-конфигурацией и активируйте промежуточное ПО YARP в приложении:

Теперь настроим балансировку нагрузки между двумя экземплярами одного и того же API-приложения через JSON-конфигурацию:

Это все, что нужно для базовой настройки прокси с балансировкой нагрузки.
Усложним задачу: используем подход на основе кода и добавим преобразование запросов. Представим, что нашим API требуется токен доступа для аутентификации, и задача обратного прокси — автоматически добавлять этот токен ко всем запросам.
Чтобы реализовать эту логику, вернемся в Program.cs и изменим конфигурацию:

Метод AddTransforms позволяет модифицировать запросы произвольным образом. Так как это ваш собственный код, вы можете обращаться к базам данных, вызывать внешние API и выполнять любую другую логику.
Сравнение YARP и NGINX
Хотя сравнение YARP и NGINX кажется логичным, важно понимать их фундаментальные различия:
- YARP — это библиотека для .NET, с помощью которой разработчики могут создавать приложения реверс-прокси и интегрировать эти возможности в существующие приложения ASP.NET Core.
- NGINX — это автономный веб-сервер и обратный прокси, который предлагает широкий набор встроенных функций, включая платные расширения (NGINX Plus).
Эти различия приводят к совершенно разным моделям применения:
- С NGINX вы получаете надежный, готовый к использованию в продакшене реверс-прокси «из коробки», который при этом требует изучения синтаксиса конфигурации, понимания его внутренних механизмов и, возможно, подключения DevOps-специалистов.
- YARP не предоставляет готовое решение — вы создаете его сами. Такой подход позволяет точно настроить прокси под требования приложения. Если у вас в команде уже есть .NET-разработчики, это может стать более экономичным и интегрированным решением, особенно в .NET-ориентированных средах.
Резюмируя: NGINX подойдет, если вам нужен проверенный инструмент с широким набором готовых функций. YARP же дает возможность создать пользовательский реверс-прокси, соответствующий вашим конкретным требованиям.
Что это значит для ваших .NET-проектов
Для компаний, уже работающих в .NET-экосистеме, YARP обеспечивает более тесную интеграцию приложений с логикой прокси, лучшее согласование разработки и эксплуатации, а также гибкость в программной настройке поведения прокси согласно бизнес-требованиям.
YARP — не просто обратный прокси, а нативный для .NET фреймворк, помогающий командам упростить сложные задачи, сохранять контроль над инфраструктурой и создавать решения, отвечающие как техническим, так и бизнес-целям.