负载均衡器后面的 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/ 这样的工具检查我的网站,我会得到这些类型的结果:
301 Moved Permanently (my URL rewrite rule)
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>
我在 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/ 这样的工具检查我的网站,我会得到这些类型的结果:
301 Moved Permanently (my URL rewrite rule)
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>