如何在AWS Application Load Balancer上将HTTP重定向到HTTPS?


12

我们的网站需要符合HIPAA标准,因此所有内容都需要加密。我不希望当他们把在客户端得到一个错误信息“ HTTP://mysite.com”,所以我需要同时支持HTTP和HTTPS,并且HTTP重定向到HTTPS。我对吗?

我在Web服务器上正确地做到了。因此,如果我直接连接到Web服务器,HTTP会自动重定向到HTTPS。都好。

但是Web服务器位于AWS Application Load Balancer后面。我不知道如何在ELB上将HTTP重定向到HTTPS。因此,客户端浏览器仍然可以通过HTTP连接到ELB。

如何在AWS Application Load Balancer上设置HTTP => HTTPS?

换句话说,我确定ELB和Web服务器之间的连接是HTTPS,但是如何确保客户端浏览器和ELB之间的连接是HTTPS?


您不会在LB上执行此操作。您可以根据X-Forwarded-ProtoLB发送的标头在实例上执行此操作。
ceejayoz

我不是服务器人员-我是C#程序员,所以请原谅我很笨-我使用URL重写模块在Windows服务器上设置重定向。如果我直接连接到服务器,它就可以工作。但是,如果我连接到ELB,我仍然可以使用HTTP连接。为什么?
Silly Dude

ALB是否正在侦听带有SSL证书的443?可以肯定的是,您还需要ALB和服务器之间的SSL吗?
Strongjz

Answers:


-4

您可以将以下列出的配置添加到您的.htaccess文件中。但是在此之前,请确保在服务器上启用了mod_rewrite且不拒绝.htaccess文件。

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

有关详细说明,请从aws端浏览官方文档。 https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/


7
这个答案似乎涉及Apache HTTP服务器
Paul Draper

2
OP询问如何配置ELB,以便您说明如何配置Apache?他们明确表示已经配置了Apache来进行重定向。请删除您的答案。
塞林


1

通常,发生的情况是将ELB设置为接收HTTPS(端口443)并转发到HTTP(端口80)上的EC2实例(负载均衡器目标)。

后端Web服务器将这些请求重定向到负载均衡器上的端口443,从而导致无限循环的重定向(在负载均衡器和后端Web服务器之间)。

常见错误消息是ERR_TOO_MANY_REDIRECTS

解决方案是在决定重定向时,查看X-Forwarded-Proto,这是负载均衡器看到的协议。

对于nginx,配置将如下所示:

server {
    listen   80;
    server_name    www.example.org;   
    if ($http_x_forwarded_proto = 'http') {
         return 301 https://$server_name$request_uri;   
    }
}

对于apache.htaccess来说像这样:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

注意:虽然可能会认为如果无需重新配置Web服务器就可以处理此操作很方便,但是截至2018年春季,还没有办法仅使用ELB来解决此问题,即,您必须配置Web服务器才能完成此工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.