Обзор YARP
YARP (Yet Another Reverse Proxy) — это высоко настраиваемая библиотека обратного прокси-сервера для .NET, созданная так, чтобы быть надёжной, гибкой, масштабируемой, безопасной и простой в использовании перед уже имеющимися у вас сервисами.
Введение
YARP помогает разработчикам создавать мощные и эффективные решения на основе обратного прокси-сервера, адаптированные под их конкретные потребности. Он располагается между клиентскими устройствами и серверами бэкенда, перенаправляя клиентские запросы на подходящий узел назначения и возвращая ответ — ту же роль играют nginx или Envoy, но здесь это библиотека, которую вы размещаете внутри собственного процесса ASP.NET Core.
Что делает обратный прокси-сервер
Обратный прокси-сервер даёт ряд преимуществ по сравнению с обычным бэкендом:
- Маршрутизация — направляет запросы на разные серверы бэкенда на основе заранее заданных правил, таких как шаблоны URL или заголовки запросов. Например,
/images,/apiи/dbмогут быть направлены на разные серверы. - Балансировка нагрузки — распределяет входящий трафик между несколькими серверами бэкенда, чтобы предотвратить перегрузку какого-либо одного из них.
- Масштабируемость — серверы бэкенда можно добавлять или удалять, не затрагивая клиента, поскольку распределением трафика занимается прокси-сервер.
- Терминация TLS — снимает нагрузку по шифрованию и расшифровке с серверов бэкенда, снижая их рабочую нагрузку.
- Безопасность — внутренние конечные точки служб остаются скрытыми от внешнего доступа, что уменьшает поверхность атаки.
Как обратный прокси-сервер обрабатывает HTTP
Входящие подключения завершаются на прокси-сервере; для исходящих запросов к узлам назначения используются новые подключения из пула. На основе настроенных правил маршрутизации YARP определяет, какой кластер должен обработать запрос, перенаправляет его — при необходимости преобразуя путь и заголовки — и передаёт ответ бэкенда обратно клиенту.
Быстрый пример
Регистрирует прокси-сервер и загружает маршруты и кластеры непосредственно из конфигурации.
C#using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();JSON{
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "cluster1",
"Match": { "Path": "{**catch-all}" }
}
},
"Clusters": {
"cluster1": {
"Destinations": {
"cluster1/destination1": { "Address": "https://example.com/" }
}
}
}
}
}Конфигурация автоматически перезагружается при изменении источника — перезапуск не требуется. Чтобы изменять конфигурацию в процессе загрузки, см. раздел Фильтры конфигурации.
Почему стоит выбрать YARP среди других прокси-серверов
YARP построен на ASP.NET Core, поэтому он напрямую интегрируется с экосистемой .NET и предоставляет богатый набор точек расширения — маршрутизацию, балансировку нагрузки и преобразования можно настраивать на привычном C#, а не на специфичном для прокси-сервера языке конфигурации. YARP активно поддерживается Microsoft, а сам YARP и его документация распространяются с открытым исходным кодом.