Como redirecionar HTTP para HTTPS no AWS Application Load Balancer?

12

Nosso site precisa de conformidade com HIPAA, portanto tudo precisa ser criptografado. Não quero que o cliente receba uma mensagem de erro quando colocar " http : //mysite.com", portanto, preciso oferecer suporte a HTTP e HTTPS e redirecionar o HTTP para HTTPS. Estou certo?

Eu fiz isso corretamente nos servidores web. Portanto, se eu me conectar diretamente aos servidores da Web, o HTTP será redirecionado automaticamente para HTTPS. Tudo bom.

Mas os servidores da Web estão atrás de um AWS Application Load Balancer. Não sei como redirecionar HTTP para HTTPS no ELB. Portanto, os navegadores clientes ainda podem se conectar ao ELB por HTTP.

Como configurar o HTTP => HTTPS em um AWS Application Load Balancer?

Em outras palavras, tenho certeza de que a conexão entre o ELB e os servidores Web é HTTPS, mas como garantir que a conexão entre os navegadores clientes e o ELB seja HTTPS?

Cara boba
fonte
Você não faz isso no LB. Você faz isso nas instâncias, com base no X-Forwarded-Protocabeçalho que o LB envia.
ceejayoz
Não sou servidor - sou programador em C #, então, desculpe-me por ser burro - usei o módulo de reescrita de URL para configurar o redirecionamento no servidor Windows. Funciona se eu me conectar diretamente ao servidor. Mas se eu conectar ao ELB, ainda posso conectar com HTTP. Por quê?
parva Cara
O ALB está escutando 443 com um certificado SSL? Para ter certeza de sua pergunta, você também deseja SSL entre o ALB e os servidores?
strongjz

Respostas:

-4

Você pode adicionar a configuração listada abaixo ao seu arquivo .htaccess. Mas antes disso, verifique se mod_rewrite está ativado no servidor e se o arquivo .htaccess não é negado.

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

Para obter uma explicação detalhada, consulte a documentação oficial do aws end. https://aws.amazon.com/premiumsupport/knowledge-center/redirect-http-https-elb/

imvikasmunjal
fonte
7
Esta resposta parece envolver o servidor HTTP Apache
Paul Draper
2
O OP pergunta como configurar o ELB para que você explique como configurar o Apache? Eles disseram explicitamente que já configuraram o Apache para fazer o redirecionamento. Por favor, apague sua resposta.
Cerin
1

Geralmente, o que acontece é que o ELB está configurado para receber https (porta 443) e encaminhar para a instância do EC2 (destino do balanceador de carga) no http (porta 80).

O servidor da web de back-end redireciona essas solicitações para a porta 443 no balanceador de carga, causando um loop infinito de redirecionamento (entre o balanceador de carga e o servidor da web de back-end).

Uma mensagem de erro comum é ERR_TOO_MANY_REDIRECTS.

A solução é olhar para o X-Forwarded-Proto, que é o protocolo visto pelo balanceador de carga, ao decidir sobre o redirecionamento.

Para o nginx, a configuração ficará assim:

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

e para o apache .htaccess algo como isto:

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

NOTA: Embora se possa pensar que seria conveniente se isso pudesse ser tratado sem a reconfiguração do servidor da web, a partir da primavera de 2018 não há como resolver isso usando apenas o ELB, ou seja, você deve configurar o servidor da web para fazer isso funcionar.

sandstrom
fonte