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.
- 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;
location / {
if ($http_x_forwarded_proto != 'https') {
rewrite ^ https://$host$request_uri? permanent;
}
}
}
- Apache2
<VirtualHost *:80>
...
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
...
</VirtualHost>
- 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>