我有一个在Amazon的弹性负载均衡器后面运行的ASP. NET MVC 4应用程序。当我在负载均衡器和Web服务器上安装SSL证书并在Web服务器层终止SSL时,一切正常。
但是,当我尝试在负载平衡器层终止,将内部流量从负载平衡器转发到端口80上未加密的web服务器时,RequireHttps属性会导致重定向循环。这似乎是有道理的,因为它正在请求一个加密的通道,而不知道它正在得到一个加密的通道(在浏览器和负载平衡器之间)。有人遇到过同样的问题吗?如有任何建议,将不胜感激!
编辑:解决方案
以下链接可能对遇到此问题的其他人有用:
MVC3、RequireHttps和自定义处理程序导致http 310
https://gist.github.com/915869
我在以下链接中提供了解决方案: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;
});
我遇到了同样的问题,我发现以下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);
}
}
似乎要在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就出来了。