我们计划在HAProxy服务器后面以蓝色/绿色设置部署我们的MVC应用程序,并进行设置,以使SSL连接将在代理服务器处终止,并且代理和Web服务器之间的通信将通过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();
});
这会在输出绝对URL时产生http://public.site.com。
有人知道为什么不能覆盖该计划或我如何做我想做的事吗?