Como faço para redirecionar o tráfego HTTP para HTTPS no meu balanceador de carga clássico?

Data da última atualização: 7/1/2022

Estou usando listeners HTTP e HTTPS no balanceador de carga clássico. Meu balanceador de carga clássico descarrega SSL e a conexão de backend escuta em uma única porta HTTP (porta 80). Quando tento redirecionar tráfego de HTTP para HTTPS (porta 443), recebo o erro “ERR_TOO_MANY_REDIRECTS”. Como faço para resolver esse erro sem alterar meu listener de backend para a porta 443?

Breve descrição

Classic Load Balancers não conseguem redirecionar o tráfego HTTP para HTTPS por padrão. Em vez disso, configure suas regras de regravação para as instâncias de servidores Web atrás do Classic Load Balancer.

Você deve configurar as regras de regravação para usar o cabeçalho X-Forwarded-Proto e redirecionar somente clientes HTTP. Caso contrário, as regras de regravação podem criar um loop infinito de solicitações de redirecionamento entre seu balanceador de carga clássico e as instâncias por trás dele. Esse loop resulta no erro “ERR_TOO_MANY_REDIRECTS”.

Observação: balanceadores de carga da aplicação podem redirecionar tráfego HTTP para HTTPS usando ações de redirecionamento. Migre seu balanceador de carga clássico para um balanceador de carga da aplicação para usar esse recurso.

Resolução

Analise os seguintes exemplos de configuração para servidores WEB Apache, NGINX e IIS. Configure os servidores Web por trás do seu balanceador de carga clássico para usar o cabeçalho X-Forwarded-Proto para direcionar tráfego com base no fato de os clientes usarem HTTP ou HTTPS. Adicione regras de regravação para os servidores Web que:

  • Redirecionam clientes usando HTTP para um URL HTTPS
  • Servem os clientes usando HTTPS diretamente

Importante: as seguintes configurações são fornecidas somente como exemplo. Modifique-as com base na sua configuração e no seu caso de uso.

Servidores Apache: método do arquivo do host virtual (prática recomendada)

1.    Abra o arquivo de configuração do Apache. Os locais possíveis incluem /etc/httpd/conf/httpd.conf (Apache 2/httpd), /etc/apache2/sites-enabled/ (Apache 2.4) ou /etc/apache2/apache2.conf (Apache no Ubuntu).

2.    Adicione uma regra de regravação à seção VirtualHost do seu arquivo de configuração semelhante ao seguinte:

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

3.    Salve o arquivo de configuração do Apache.

4.    Reinicie o Apache.

Servidores Apache: método do arquivo .htaccess (não é uma prática recomendada)

Advertência: é uma prática recomendada usar o método do arquivo do host virtual descrito na seção anterior. De acordo com as diretrizes dos arquivos Apache .htaccess, use arquivos .htaccess somente se você não tiver acesso ao principal arquivo de configuração do Apache.

1.    Abra o arquivo de configuração do Apache. Os locais possíveis incluem /etc/httpd/conf/httpd.conf (Apache 2/httpd) ou /etc/apache2/sites-enabled/ (Apache 2.4).

2.    Edite a diretiva Directory (Diretório) para habilitar .htaccess, como mostrado a seguir:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3.    Salve o arquivo de configuração do Apache.

4.    Abra o arquivo .htaccess.

5.    Adicione uma regra de regravação semelhante a:

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

6.    Salve o arquivo .htaccess.

7.    Reinicie o Apache.

Servidores NGINX

Observação: esta resolução se aplica ao NGINX 1.10.3 (Ubuntu) e ao NGINX 1.12.1 (Amazon Linux).

1.    Abra o arquivo de configuração do NGINX (nginx.conf).

2.    Adicione a seguinte regra de regravação. Modifique a regra de regravação da sua configuração.

server {
    listen 80;
    server_name _;
    if ($http_x_forwarded_proto = 'http'){
    return 301 https://$host$request_uri;
    }
}

3.    Reinicie o NGINX.

Servidores IIS

Observação: esta resolução se aplica ao Microsoft Windows Server 2012 R2 e 2016 Base.

1.    Instale o módulo de regravação de URL do IIS da Microsoft.

2.    Abra o arquivo web.config.

3.    Adicione a seguinte regra de regravação à seção <system.webServer>. Modifique a regra de regravação da sua configuração específica.

<rewrite>
    <rules>
        <rule name="Rewrite HTTP to HTTPS" stopProcessing="true">
            <match url="^(.*)$"/>
            <conditions logicalGrouping="MatchAny">
                <add input="{HTTP_X_FORWARDED_PROTO}" pattern="^http$"/>
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
        </rule>
    </rules>
</rewrite>

4.    Salve o arquivo web.config.

5.    Abra o IIS Manager.

6.    Atualize o navegador padrão.

7.    Verifique se a nova regra de regravação aparece na seção URL Rewrite (Regravar URL).

8.    Reinicie seu site.

9.    Verifique se o redirecionamento funciona.