Мы планируем развернуть наше приложение MVC в сине-зеленой настройке за HAProxy-сервером и настраиваем его так, чтобы SSL-соединение заканчивалось на прокси-сервере, а связь между прокси-сервером и веб-сервером осуществлялась через http и используя внутреннее имя хоста.
Проблема этого подхода заключается в том, что иногда нашему приложению необходимо генерировать абсолютные URL-адреса (например, при отправке электронных писем), а генерируемые URL-адреса http://internal.site.com вместо https://public.site.com.
Прокси-сервер добавляет головки X-Forwarded-Proto и X-Forwarded-Host с оригинальной схемой и именем хоста, поэтому мы хотим, чтобы наше приложение использовало их для создания абсолютных URL-адресов.
Существуют промежуточные решения для этого, если вы используете .Net Core, и мы использовали их, чтобы попытаться сделать это сами (несмотря на то, что в .Net Standard они не работали напрямую с нашим проектом). У нас это работает для замены хоста, но по какой-то причине он не заменяет схему, когда мы делаем это (упрощено для краткости):
app.Use((ctx, next) =>
{
//this works
ctx.Request.Host = HostString.FromUriComponent("public.mysite.com");
//this does nothing
ctx.Request.Scheme = "https";
return next();
});
Это выдает http://public.site.com при выводе абсолютных URL.
Кто-нибудь знает, почему не работает переопределение схемы или как я могу делать то, что пытаюсь сделать?