负载均衡器后面的 MVC HTTPS 重定向

MVC HTTPS redirection when behind a load balancer

我在 Amazon Elastic Load Balancer 后面的 Amazon EC2 上的某些 IIS 服务器中使用 MVC5。 IIS服务器只运行HTTP协议,ELB转HTTPS。

IIS 服务器不知道用户是否通过 HTTPS 访问,所以我有一个重写规则检查 "X-Forwarded-Proto" header 以将用户重定向到 HTTPS。

不幸的是,当需要登录时,MVC/IIS 将用户重定向到 HTTP 中的 登录页面。

如果我使用像 http://www.redirect-checker.org/ 这样的工具检查我的网站,我会得到这些类型的结果:

http://example.com/

301 Moved Permanently (my URL rewrite rule)

https://example.com/

302 Found (Login-required redirect -> why to HTTP?)

http://example.com/Account/Logon?ReturnUrl=%2F

301 Moved Permanently (again my URL rewrite rule)

https://example.com/Account/Logon?ReturnUrl=%2F

200 OK

我是不是漏掉了什么?

我可以配置 login-redirect 以保留协议,从而消除这些重定向之一吗?

更好的是,我能否以某种方式先于 login-redirect 规则并使其强制使用 HTTPS,以便只有一个重定向?

非常感谢!

附录: 我检查了像 "RedirectToAction" 这样的命令发送像“/Index2”这样的地址,而不是整个“http://example.com/Index2”。这很好,所以它保留了用户协议。

假设您正在使用 ASP.NET 表单身份验证,请查看 web.config 中的 Authentication 配置并将 requireSsl="true" 添加到 <forms>元素,如下:

<authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" requireSSL="true" />
</authentication>