У меня есть устаревшее приложение ASP.NET MVC, которое я хотел бы постепенно перенести в приложение ASP.NET Core 8 с помощью YARP.
Представьте, что мое устаревшее приложение размещено под url foo.com, а мое прокси-приложение размещено по URL bar.com. Когда я перехожу на главную страницу bar.com, срабатывает логика аутентификации, и меня перенаправляют на bar.com/account/login, где отображается содержимое из foo. .com/account/login. Это отлично работает для меня. Вот мой код:
var httpClient = new HttpMessageInvoker(new SocketsHttpHandler
{
UseProxy = false,
AllowAutoRedirect = false,
AutomaticDecompression = DecompressionMethods.None,
UseCookies = true,
EnableMultipleHttp2Connections = true,
ActivityHeadersPropagator = new ReverseProxyPropagator(DistributedContextPropagator.Current),
ConnectTimeout = TimeSpan.FromSeconds(60),
});
var transformer = HttpTransformer.Empty;
var requestOptions = new ForwarderRequestConfig();
app.MapForwarder("/{**catch-all}", app.Configuration["ProxyTo"], requestOptions, transformer, httpClient);
Теперь я хотел бы переключиться с MapForwarder на MapReverseProxy. Я соответственно изменил свой код
builder.Services.AddHttpForwarder();
builder.Services.AddReverseProxy()
.ConfigureHttpClient((context, handler) =>
{
handler.AllowAutoRedirect = false;
handler.UseProxy = false;
handler.EnableMultipleHttp2Connections = true;
handler.UseCookies = true;
handler.ConnectTimeout = TimeSpan.FromSeconds(60);
})
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
builder.Services.AddSystemWebAdapters()
.AddRemoteAppClient(options =>
{
options.RemoteAppUrl = new Uri(builder.Configuration
["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]!);
options.ApiKey = builder.Configuration["RemoteAppApiKey"]!;
})
.AddAuthenticationClient(true);
...
app.MapReverseProxy();
Теперь поведение изменилось. Если handler.AllowAutoRedirect имеет значение false, то bar.com перенаправляется на foo.com/account/login – я не хочу менять домены.
Если handler.AllowAutoRedirect имеет значение true, то bar.com отображает содержимое foo.com/account/login – домен не меняется, но путь /аккаунт/логин не сохраняется.
Что я делаю не так?
моя конфигурация такая вот так просто:
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "fallbackCluster",
"Match": {
"Path": "{**catch-all}"
}
}
},
"Clusters": {
"fallbackCluster": {
"Destinations": {
"fallbackApp": {
"Address": "https://localhost:44311/"
}
}
}
}
},
Подробнее здесь: https://stackoverflow.com/questions/787 ... proxy-yarp