В развивающемся мире современных веб-приложений возникает общая потребность по разным причинам: необходимость направлять клиентские запросы с одного сервера на несколько серверных служб, скрывая от клиента идентификационные данные этих внутренних служб. Эта концепция известна как обратный прокси-сервер и стала основой архитектуры приложений благодаря своим мощным функциям балансировки нагрузки и безопасности.

Эта запись в блоге поможет вам реализовать обратный прокси-сервер с помощью .NET Core и Azure. Давайте начнем.

Понимание обратного прокси

Обратный прокси — это тип сервера, который извлекает ресурсы от имени клиента из одной или нескольких служб. Клиенты взаимодействуют с обратным прокси-сервером, и прокси-сервер перенаправляет запросы в соответствующую серверную службу.

Шаг 1. Создайте проект веб-API ASP.NET Core.

Во-первых, нам нужно создать новый проект в .NET Core для нашего обратного прокси.

Откройте терминал или командную строку, перейдите в нужный каталог и выполните следующую команду:

dotnet new web -n ReverseProxy

Эта команда создает новый проект веб-API с именем «ReverseProxy».

Шаг 2: Настройте промежуточное ПО YARP

В нашем проекте ReverseProxy мы будем использовать промежуточное ПО YARP (Yet Another Reverse Proxy), мощную библиотеку, разработанную для .NET для создания обратного прокси.

Сначала добавьте пакет YARP NuGet в свой проект:

cd ReverseProxy
dotnet add package Microsoft.ReverseProxy -v 1.0.0-preview.11

В файле Startup.cs добавьте следующий код в метод Configure:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapReverseProxy();  // Add this line to map the reverse proxy
    });
}

Это сопоставит обратный прокси-сервер с вашими конечными точками.

Шаг 3. Настройте параметры прокси-сервера

Далее мы настроим конфигурации прокси. Эти настройки определяют, как обратный прокси-сервер будет обрабатывать входящие запросы.

В файл appsettings.json добавьте следующий код:

"ReverseProxy": {
    "Routes": [
      {
        "RouteId": "route1",
        "ClusterId": "cluster1",
        "Match": {
          "Path": "{**catch-all}"
        }
      }
    ],
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "cluster1/destination1": {
            "Address": "https://your-azure-service-url/"
          }
        }
      }
    }
  }

Эта конфигурация будет перенаправлять все входящие запросы в указанную службу Azure.

Шаг 4. Развертывание прокси-сервера в Azure

Следующим шагом будет развертывание обратного прокси-сервера в Azure. Здесь мы будем использовать службу приложений Azure — платформу как услугу от Microsoft, которая обеспечивает простое размещение и масштабирование веб-приложений.

Создайте службу приложений Azure.

Перейдите на портал Azure и создайте новую службу приложений.

Опубликовать прокси-приложение

В локальном терминале перейдите в каталог вашего проекта и выполните следующую команду, чтобы опубликовать свой проект:

dotnet publish -c Release -o ./publish

Загрузите опубликованное приложение

Перейдите к службе приложений на портале Azure и с помощью дополнительных инструментов (Kudu) загрузите файлы, расположенные в каталоге публикации вашего проекта.

Запустите приложение

На портале Azure перейдите на страницу обзора службы приложений и нажмите кнопку Пуск, если служба еще не запущена.

Поздравляем! Вы успешно развернули обратный прокси-сервер с помощью .NET Core и Azure. Теперь ваши клиентские приложения могут подключаться к серверной службе Azure, используя URL-адрес вашей службы приложений Azure, а не напрямую вызывать серверную часть.

Заключение

Применение обратного прокси — мощная техника в архитектуре веб-приложений. Он обеспечивает балансировку нагрузки, обеспечивает уровень безопасности и помогает поддерживать чистоту и управляемость архитектуры службы. Эта запись в блоге должна предоставить вам отправную точку для реализации обратного прокси-сервера с использованием .NET Core и Azure. Поэкспериментируйте с более сложными конфигурациями и вариантами использования, чтобы максимально эффективно использовать эти инструменты.