当前位置: 首页 > 知识库问答 >
问题:

RequireHttps导致Amazon弹性负载平衡器上的重定向循环

徐旻
2023-03-14

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

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

编辑:解决方案

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

MVC3、RequireHttps和自定义处理程序导致http 310

https://gist.github.com/915869

共有3个答案

微生学
2023-03-14

我在以下链接中提供了解决方案:https://stackoverflow.com/questions/37954796/requirehttpsattribute-with-netcore-rc2-causes-http302-redirect-loop-on-azure#=

上面写着:

您可以通过在启动时向ConfigureServices添加以下行来解决此问题。cs(并添加“使用Microsoft.AspNetCore.HttpOverrides;”)

services.Configure<ForwardedHeadersOptions>(options =>
        {
            options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
        });
闾丘淇
2023-03-14

我遇到了同样的问题,我发现以下RequireAttribute筛选器对我有效。

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);
    }
}
白子昂
2023-03-14

似乎要在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

 类似资料:
  • 我们试图在自动缩放的AWS中使用弹性负载平衡,这样我们就可以根据需要进行缩放。 我们的应用程序由几个较小的应用程序组成,它们都位于同一子网和同一VPC上。 我们想把我们的ELB放在一个应用程序和其他应用程序之间。 问题是我们希望负载均衡器在内部使用API的不同应用程序之间工作,并且面向互联网,因为我们的应用程序仍然有一些应该在外部而不是通过API完成的用法。 我已经读过这个问题,但我无法从那里准确

  • 以下是我的设置: EC2与Apache使用弹性负载均衡器。 我希望所有超文本传输协议流量都自动重定向到https。我找到了这个reco,并通过添加到我的httpd.conf文件中来尝试: 然而,这在我重新启动服务器之前或之后都不起作用。HTTP没有重定向,我的站点抛出了各种错误,直到我从配置中删除了该规则。 我认为我更新文件错误或负载均衡器设置不正确。对于负载均衡器的侦听器,我有LB协议HTTP,

  • 我正在尝试将所有HTTP请求重定向到我的服务器,并切换到HTTPS。 ELB正在监听端口80,并在我的应用程序上将所有请求转发到端口8088。然后,应用程序发送一个301永久移动响应,重定向到同一URL,但删除了所有端口并添加了“https://”。这会导致客户端通过HTTPS重新请求url。 当我在本地测试它时,它工作得很好,但当我将它部署到弹性负载平衡器后面的EC2时,返回了502坏网关。服务

  • 我在私有子网实例上托管了一个web应用程序,因为该应用程序面向不同地理位置的组织内部用户。此应用程序需要AWS CloudFront支持,以便更有效地提供静态内容。问题是-我需要面向internet的负载平衡器(在公共子网中有实例)作为CloudFront分发的源。 我不希望面向internet的ELB和公共子网中的结果实例。 我可以利用AWS CloudFront连接到内部ELB吗?

  • 我目前有一个基于rails的Web应用程序,它需要通过HTTP提供一小部分页面——但更喜欢通过HTTPS提供其余部分。在我当前的AWS设置中,SSL终止于弹性负载均衡器,与我的应用服务器的所有通信都通过HTTP进行。正因为如此,像Rack SSL Enforcher这样的解决方案是不合适的。目前,我在每个页面中提供以下JS片段来处理重定向: 这导致每次访问其中一个页面时,性能都会受到相对显著的影响

  • 这意味着Zookeeper将负载均衡器理解为一个客户机,并与之建立联系。但是负载均衡器只是ping TCP2181就出来了。