Quando configuramos um AWS Load Balancers vemos a opção de Listeners, onde podemos configurar qual a porta do LB que será redirecionada para a porta das instâncias que fazem parte deste.
Porém surge uma grande dúvida: Como podemos fazer o redirecionamento do acesso via HTTP para HTTPS? Lembrando que, o LB não tem esta opção de fazer o redirecionamento automático.
Portanto devemos delegar a tarefa para o serviço que responde por HTTP dentro da instância. Neste nosso caso usamos o NGinx, mas nos exemplos abaixo vamos deixar um modelo de configuração para Apache2 e IIS também.
Uma observação importante: Quando usamos o LB na frente de nossa aplicação o certificado SSL deverá ser adicionado na porta do referente ao HTTPS do próprio Load Balancers. Porém a instância deverá ter estas configurações referente a porta 443.
Pois o LB manda a requisição da porta 80 (HTTP) para o serviço na instância e lá dentro que ocorrer o redirecionamento para HTTPS.
1 – NGinx: Observer que deixamos os valores de server_name como indefinidos.
server { listen 80; server_name ""; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; g>location / { if ($http_x_forwarded_proto != 'https') { rewrite ^ https://$host$request_uri? permanent; } } }
2 – Apache2
<VirtualHost *:80> ... RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} ... </VirtualHost>
3 – IIS
Install IIS Url-Rewrite module, using the configuration GUI add these settings <rewrite xdt:Transform="Insert"> <rules> <rule name="HTTPS rewrite behind ELB rule" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions> <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$" ignoreCase="false" /> </conditions> <action type="Redirect" redirectType="Found" url="https://{SERVER_NAME}{URL}" /> </rule> </rules> </rewrite>