【问题标题】:RequireHttps causes redirect loop on Amazon Elastic Load BalancerRequireHttps 导致 Amazon Elastic Load Balancer 上的重定向循环
【发布时间】:2012-08-22 01:45:25
【问题描述】:

我有一个 ASP.NET MVC 4 应用程序在 Amazon 的弹性负载均衡器后面运行。当我在负载平衡器 Web 服务器上安装 SSL 证书并在 Web 服务器层终止 SSL 时,一切正常。

但是,当我尝试在负载均衡器层终止,将内部流量从负载均衡器转发到端口 80 上未加密的 Web 服务器时,RequireHttps 属性会导致重定向循环。这似乎是有道理的,因为它正在请求一个加密通道并且不知道它正在获得一个(在浏览器和负载平衡器之间)。有没有人遇到过同样的问题?任何建议将不胜感激!

编辑:解决方案

以下链接可能对遇到此问题的其他人有用:

MVC3, RequireHttps and custom handler result in http 310

https://gist.github.com/915869

【问题讨论】:

    标签: asp.net-mvc ssl amazon-web-services load-balancing


    【解决方案1】:

    我在以下链接中为此提供了解决方案: 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;
            });
    

    【讨论】:

      【解决方案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);
          }
      }
      

      【讨论】:

      • 实现了这一点并得到“响应时间太长。”我还有什么遗漏的吗?
      【解决方案3】:

      似乎要在 AWS 上使用此功能,您需要查看“X-Forwarded-Proto”HTTP 标头项。如果初始请求是 HTTPS,负载均衡器会注入标头并显示“https”。如果是 HTTP,它会显示“http”。

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

      【讨论】:

        猜你喜欢
        • 2011-12-08
        • 2016-02-05
        • 2011-09-18
        • 2012-11-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 2021-05-25
        • 1970-01-01
        相关资源
        最近更新 更多