我在后面跟着跑亚马逊的弹性负载均衡器的ASP.NET MVC应用4。 当我对负载平衡器和 Web服务器安装我的SSL证书,并在Web服务器层终止SSL,一切工作正常。
然而,当我试图在负载平衡器层终止,转发内部流量从负载平衡器到Web服务器未加密的上端口80,RequireHttps属性导致重定向循环。 这看似有意义的,因为它正在请求加密通道,并且不知道它是越来越酮(之间的浏览器和负载平衡器)。 有没有人遇到同样的问题? 任何建议,将不胜感激!
编辑:该解决方案
下面的链接可能是别人谁运行到这个问题有用:
MVC3,RequireHttps和自定义的处理导致HTTP 310
https://gist.github.com/915869
看来,使用AWS上的此功能,你看“X - 转发,原” HTTP标头项目。 如果初始请求是HTTPS时,负载平衡器喷射头,它说“HTTPS”。 如果是HTTP,它说,“HTTP”。
答案在这里找到: http://aws.typepad.com/aws/2010/10/keeping-customers-happy-another-new-elastic-load-balancer-feature.html
我正在经历我发现下面RequireHttpsAttribute过滤器为我工作了同样的问题。
public class SSLFilter : RequireHttpsAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (filterContext.HttpContext.Request.IsLocal ||
(filterContext.RequestContext.HttpContext.Request.Headers.AllKeys.Contains("X-Forwarded-Proto") &&
filterContext.RequestContext.HttpContext.Request.Headers.Get("X-Forwarded-Proto").ToLower().Equals("https")))
{
return;
}
base.OnAuthorization(filterContext);
}
}
我提供在下面的链接了一个解决方案: https://stackoverflow.com/questions/37954796/requirehttpsattribute-with-netcore-rc2-causes-http302-redirect-loop-on-azure# =
它说:
您可以解决此通过添加Startup.cs以下行ConfigureServices(并添加“使用Microsoft.AspNetCore.HttpOverrides;”)
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
});