Всем привет, я гастарбайтер!
Упомянутое программное обеспечение обратного прокси,Каждый, должно быть, подумал об этом в первую очередь:Nginx,Это верно,Nginx действительно является отличным программным обеспечением для обратного прокси.,Многие крупные производители используют его.,Например: Майкрософт.
Однако в настоящее время Microsoft использует его для замены Nginx, что увеличивает пропускную способность на 80%!
В 2021 году Microsoft преобразует внешнюю очередь службы приложений в Kestrel + YARP. В настоящее время это приложение обрабатывает более 160 миллиардов HTTP-запросов в день и представляет собой приложение собственной разработки Microsoft, построенное на .NET с использованием инфраструктуры .NET.
Итак, сегодня давайте узнаем о YARP.
Yarp (Еще один обратный прокси) — это набор инструментов обратного прокси-сервера для использования инфраструктуры ASP.NET и .NET и создания быстрых прокси-серверов в .NET. Yarp — это легкий обратный прокси-сервер .NET, который поддерживает протоколы HTTP и HTTPS и может пересылать запросы на другие серверы.
Yarp основан на архитектуре .Net, поэтому его можно применять в Windows и Linux. Самая большая особенность Yarp заключается в том, что его можно настраивать, а индивидуальные прокси-каналы можно разрабатывать в соответствии с конкретными сценариями. Вы можете настроить его в соответствии с конкретными потребностями вашего приложения, использовать правила для пересылки запросов, а также добавлять или изменять заголовки HTTP при пересылке запросов.
YARP имеет множество ключевых функций, в том числе:
также,YARP также имеет некоторые особенности,нравитьсяобратный прокси、балансировка нагрузки、Ограничение тока(толькосуществоватьиспользовать.NET Доступно в версии 7.0 или выше), аутентификация и авторизация, сжатие, кэширование, проверка работоспособности, распределенная трассировка и т. д.
YARP 2.0.0 поддерживает ASP.NET Core 6.0 и выше. Пакет SDK для .NET можно загрузить по адресу https://dotnet.microsoft.com/download/dotnet/.
Поэтому среда установки требует предварительного развертывания среды .Net, что можно проверить с помощью следующей команды:
dotnet --version
Затем используйте командную строку, чтобы создать пустой проект ASP.NET Core.
dotnet new web -n MyProxy -f net6.0
Затем используйте инструмент управления nuget, чтобы вручную добавить пакет Yarp.ReverseProxy, или вы можете добавить его, используя командный режим.
Install-Package Yarp.ReverseProxy
Зарегистрируйте Yarp в файле Program.cs.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
app.MapReverseProxy();
app.Run();
Настройте appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ReverseProxy": {
"Routes": {
"route1" : {
"ClusterId": "cluster1",
"Match": {
"Path": "{**catch-all}"
}
}
},
"Clusters": {
"cluster1": {
"Destinations": {
"microsoft": {
"Address": "https://docs.microsoft.com/zh-cn/" },
"github":{
"Address": "https://github.com/"
}
}
}
}
}
После завершения настройки просто запустите проект. Доступ к сайту произведет случайный обратный прокси-сервер на официальный сайт Microsoft и github, что приведет к следующему эффекту:
Дополнительные сведения об операциях и процессах настройки см. по адресу: https://microsoft.github.io/reverse-proxy/articles/getting-started.html.
Оба имеют одинаковые функции и определенно взаимозаменяемы в связанных конфигурациях. Эта часть конфигурации будет продемонстрирована далее.
YARP обеспечивает функциональность объединения маршрутов, аналогичную Nginx.
#Nginx
/webapp
#YRAP
"route1" : {
"ClusterId": "cluster1",
"Match": {
"Path": "/webapp/{**catch-all}"
}
YARP Имеет встроенную балансировку нагрузки Функция,доступен по запросуизсвойство(нравитьсяURLпуть、Заголовок запроса、IP-адрес клиента и т. д.) пересылают его на многосерверный сервер.
#Nginx Конфигурациябалансировка нагрузки
upstream backend {
server localhost:9002;
server localhost:9003;
}
server {
listen 8080;
server_name localhost;
location / {
# backend Это название группы серверов
proxy_pass http://backend/;
}
}
#YARPКонфигурациябалансировка нагрузки
"Destinations": {
"APP1": {
"Address": "https://10.0.0.1:9999"
},
"APP2":{
"Address": "https://10.0.0.1:8888"
}
}
Официальные примеры:
Nginx середина Перезапись адрес Использовать напрямую rewrite
server {
location / {
limit_conn myip 10;
limit_conn myServerName 100;
rewrite / http://www.mingongge.com permanent;
}
Yarp добавляет конфигурацию в маршрут
"Transforms": [
{ "PathRemovePrefix": "/OMS" }
]
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
По умолчанию YARP имеет значение X-Forwarded-For, которое необходимо настроить как X-Forwarded-Host, которое можно изменить в Transforms.
Конфигурация таймаута Nginx
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
Конфигурация тайм-аута Yarp
"HttpRequest": {
"ActivityTimeout": "<timespan>",#Формат"ActivityTimeout": "00:00:30"
"Version": "<string>",
"VersionPolicy": ["RequestVersionOrLower", "RequestVersionOrHigher", "RequestVersionExact"],
"AllowResponseBuffering": "<bool>"
}
YARP вносит огромные улучшения в службы приложений Microsoft Azure:
Инновационная технология Kestrel + YARP, разработанная основной командой Microsoft .NET, по-прежнему очень ценна, и ее стоит попробовать внедрить в свои собственные проекты разработки.