RequireHttps原因重定向循环在亚马逊弹性负载均衡(RequireHttps causes

2019-06-27 10:09发布

我在后面跟着跑亚马逊的弹性负载均衡器的ASP.NET MVC应用4。 当我对负载平衡器 Web服务器安装我的SSL证书,并在Web服务器层终止SSL,一切工作正常。

然而,当我试图在负载平衡器层终止,转发内部流量从负载平衡器到Web服务器未加密的上端口80,RequireHttps属性导致重定向循环。 这看似有意义的,因为它正在请求加密通道,并且不知道它是越来越酮(之间的浏览器和负载平衡器)。 有没有人遇到同样的问题? 任何建议,将不胜感激!

编辑:该解决方案

下面的链接可能是别人谁运行到这个问题有用:

MVC3,RequireHttps和自定义的处理导致HTTP 310

https://gist.github.com/915869

Answer 1:

看来,使用AWS上的此功能,你看“X - 转发,原” HTTP标头项目。 如果初始请求是HTTPS时,负载平衡器喷射头,它说“HTTPS”。 如果是HTTP,它说,“HTTP”。

答案在这里找到: http://aws.typepad.com/aws/2010/10/keeping-customers-happy-another-new-elastic-load-balancer-feature.html



Answer 2:

我正在经历我发现下面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);
    }
}


Answer 3:

我提供在下面的链接了一个解决方案: 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;
        });


文章来源: RequireHttps causes redirect loop on Amazon Elastic Load Balancer