我使用Route53 + LoadBalancer + EC2在AWS上提供应用程序。
我想强制所有用户使用https。每当在http上发出请求时,我都希望将其重定向到https请求。
我知道将HTTP重定向到HTTPS的三种方法:
客户端。这涉及使用JS检查主机是http还是https,如果是https则重定向。
服务器端。这涉及配置Web服务器以将所有http请求重定向到https。
但是,我很好奇:可以在Route53或LoadBalancer阶段完成吗?
是否有某种方法可以配置Route53或LoadBalancer,以便将http上的任何请求重定向到https?
谢谢!
对于downvoters:请说明你投票的原因。我在SO / Google上找到的解决方案是“如何通过服务器进行重定向,这是选项2.我正试图在AWS层解决这个问题。”
答案 0 :(得分:2)
做客户端重定向'没有意义。当JS运行并进行重定向时,为时已晚。请求响应内容已经在网络上泄露。您必须在服务器端执行此操作,使用301 status and Location header进行回复,而不是内容。在点击你的应用程序(php,节点等)之前,这可以而且应该由你的Web服务器堆栈(nginx,Apache)完成。
ELB不支持重定向。它通过转发将HTTP流量转发到HTTP目标组并添加X-Forwarded-proto
标头来支持SSL / TLS 卸载,请参阅How do I redirect HTTP traffic on my server to HTTPS on my load balancer?。但重定向必须由后端服务器处理。
最新更新: AWS宣布支持应用程序负载均衡器的重定向和固定响应,并采用两个新操作:重定向和固定响应。这样,您可以在负载均衡器级别配置HTTP到HTTPS重定向。
答案 1 :(得分:0)
我遇到了同样的问题,这就是我解决它的方法:
cd /etc/httpd/conf.d/elasticbeanstalk
nano 00_application.conf
将此内容添加到
中...
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://example.com [L,R=permanent]
</VirtualHost>
service httpd restart
从网络浏览器中清除Cookie并尝试使用http来查看是否重定向
答案 2 :(得分:0)
用于解决此问题的AWS方法是通过AWS Cloudfront。您可以通过Route53购买URL(不必这样做),然后在AWS证书管理器中创建SSL证书,然后设置AWS Cloudfront(在此需要刚刚设置的证书)。嘿,请注意,网站已交付了SSL,并为您设置了AWS的所有安全性,并提供了非常快速的交付服务。