Расположение ответа на преобразование обратного прокси-сервера YARP для перенаправленийC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Расположение ответа на преобразование обратного прокси-сервера YARP для перенаправлений

Сообщение Anonymous »

Я создаю обратный прокси-сервер на основе .net YARP. Моя цель — иметь несколько приложений по пути. Например. /kibana -> будет указывать на мой внутренний сервер Kibana. То же самое с /grafana и т. д.
Начал с Kibana. Я использую C# только для того, чтобы впоследствии динамически добавлять несколько серверов Kibana.
У меня есть этот маршрут:

Код: Выделить всё

    private static IReadOnlyList GetRoutes()
{
return new[]
{
new RouteConfig
{
RouteId = "kibanaRoute",
ClusterId = "kibanaCluster",
Match = new RouteMatch
{
Path = "/kibana/{**catch-all}" // Match all paths under /kibana
},
}
};
}

private static IReadOnlyList GetClusters()
{
return new[]
{
new ClusterConfig
{
ClusterId = "kibanaCluster",
Destinations = new Dictionary
{
{
"destination1", new DestinationConfig
{
Address = "https://mykibana.com/" // Address of the internal Kibana service
}
}
}
}
};
}
Прежде чем приступить к загрузке внешних ресурсов (.js, .css и т. д., для чего мне придется немного переписать URL-адрес), я сталкиваюсь с первой проблемой перенаправления.
Навигация to /kibana правильно примет мой запрос на https://mykibana.com. Однако кибана выполняет 302 для /login?next=%2Fkibana
Я добавил следующее преобразование (жестко запрограммированное для моего примера /kibana):

Код: Выделить всё

builder.Services.AddReverseProxy().LoadFromMemory(GetRoutes(), GetClusters())
.AddTransforms(builderContext =>
{
builderContext.AddPathRemovePrefix("/kibana/");  // Remove /kibana before forwarding

builderContext.AddResponseTransform(async (transformContext) =>
{
if (transformContext.ProxyResponse.StatusCode == System.Net.HttpStatusCode.MovedPermanently || transformContext.ProxyResponse.StatusCode == System.Net.HttpStatusCode.Redirect)
{
if (transformContext?.ProxyResponse?.Headers.Location != null)
{
try
{
var originalLocation = transformContext.ProxyResponse.Headers.Location;
if (Uri.TryCreate($"/kibana{originalLocation}", UriKind.Relative, out var locationUri))
{
transformContext.ProxyResponse.Headers.Location = locationUri;
}
}
catch (Exception ex)
{

throw;
}
}
}
await Task.CompletedTask;
});
});
Тем не менее, меня по-прежнему перенаправляют на /login?next=%2Fkibana вместо /kibana/login?next=%2Fkibana.
Да у кого-нибудь есть лучшее решение, чем преобразование ответов? Или знаете, почему они не работают?

Подробнее здесь: https://stackoverflow.com/questions/789 ... -redirects
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»