Обратный Прокси — Сервер Yarp-Ответ 502 Плохой Шлюз

#c# #asp.net-core #asp.net-core-3.1 #yarp

Вопрос:

Я хочу реализовать обратный прокси-сервер с помощью Yarp. Api запущен и работает, так как я могу отправить ему запрос. Однако всякий раз, когда я пытаюсь выполнить тот же запрос через прокси-сервер, я получаю сообщение об ошибке 502 Плохой шлюз

Startup.cs

 public void ConfigureServices(IServiceCollection services)
{
    services.AddReverseProxy()
     .LoadFromConfig(Configuration.GetSection("ReverseProxy"));
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    app.UseRouting();
    // Register the reverse proxy routes
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapReverseProxy();
    });
}
 

Настройки приложений

 "ReverseProxy": {
    "Routes": {
      "route1": {
        "ClusterId": "cluster1",
        "Match": {
          //"Methods": [ "GET", "POST", "PUT", "HEAD", "OPTIONS", "DELETE" ],
          "Path": "{**catch-all}"
        }
      }
    },
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "cluster1/destination1": {
            "Address": "https://localhost:44339/"
          }
        }
      }
    }
  }
 

Я получаю ответ — 502 плохой шлюз в любое время, когда отправляю запрос через прокси

Ответ №1:

Вы должны нажать output и выбрать ProjectName-Asp.Net Core Web Server , чтобы проверить детали.

Я использую ваш код, а также добавляю другие настройки и проверяю журналы, я обнаружил, что причина в http://localhost:44339 не начинай. Он должен использовать порт другого веб-приложения в локальном.

введите описание изображения здесь

 {
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  //"AllowedHosts": "*"

  "ReverseProxy": {
    "Routes": [
      {
        "ClusterId": "cluster1",
        "Match": {
          //"Methods": [ "GET", "POST", "PUT", "HEAD", "OPTIONS", "DELETE" ],
          "Path": "{**catch-all}"
        }
      },
      {
        // matches /something/* and routes to 2 external addresses
        "ClusterId": "cluster2",
        "Match": {
          "Path": "/something/{*any}"
        }
      }
    ],
  "Clusters": {
      "cluster1": {
        "Destinations": {
          "cluster1/destination1": {
            "Address": "http://localhost:44339/"
          }
        }
      },
      "cluster2": {
        "Destinations": {
          "first_destination": {
            "Address": "https://baidu.com"
          },
          "another_destination": {
            "Address": "https://bing.com"
          }
        },
        "LoadBalancingPolicy": "PowerOfTwoChoices"
      }

    }
  }
}
 

Результат теста

по умолчанию: https://localhost:44370

введите описание изображения здесь

https://localhost:44370/somthing

он перенаправит на сайт bing.

введите описание изображения здесь