Asp.net-Mvc
RequireHttps 導致 Amazon Elastic Load Balancer 上的重定向循環
我有一個在 Amazon 的彈性負載均衡器後面執行的 ASP.NET MVC 4 應用程序。當我在負載均衡器和Web 伺服器上安裝 SSL 證書並在 Web 伺服器層終止 SSL 時,一切正常。
但是,當我嘗試在負載均衡器層終止,將內部流量從負載均衡器轉發到埠 80 上未加密的 Web 伺服器時,RequireHttps 屬性會導致重定向循環。這似乎是有道理的,因為它正在請求一個加密通道並且不知道它正在獲取一個(在瀏覽器和負載平衡器之間)。有沒有人遇到過同樣的問題?任何建議,將不勝感激!
編輯:解決方案
以下連結可能對遇到此問題的其他人有用:
似乎要在 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
我遇到了同樣的問題,我發現以下 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); } }