Eu uso receptores HTTP e HTTPS no meu Elastic Load Balancing (ELB) Classic Load Balancer (ELB). O My Classic Load Balancer descarrega o SSL e a conexão de backend escuta em uma única porta HTTP (porta 80). Quando tento redirecionar o tráfego de HTTP para HTTPS (porta 443), recebo o erro “ERR_TOO_MANY_REDIRECTS”.
Breve descrição
O Classic Load Balancer não suporta o redirecionamento do tráfego HTTP para HTTPS como um atributo nativo. Para que isso funcione, você deve configurar suas regras de regravação nas instâncias do servidor web por trás do Classic Load Balancer.
Configure as regras de reescrita nos servidores de aplicativos web para usar o cabeçalho X-Forwarded-Proto e redirecionar solicitações que são HTTP. Caso contrário, as regras de reescrita podem criar um loop infinito de solicitações de redirecionamento entre o Classic Load Balancer e as instâncias por trás do balanceador de carga. Esse loop resulta no erro “ERR\ _TOO\ _MANY\ _REDIRECTS”.
Observação: os Application Load Balancers suportam ações de redirecionamento que podem ser usadas para redirecionar o tráfego HTTP para HTTPS. Para usar esse atributo, migre seu Classic Load Balancer para um Application Load Balancer.
Resolução
Examine os exemplos a seguir de configurações para servidores web Apache, NGINX e IIS. Configure os servidores web por trás do Classic Load Balancer para usar o cabeçalho X-Forwarded-Proto para direcionar o tráfego com base no fato de os clientes usarem HTTP ou HTTPS. Certifique-se de adicionar regras de reescrita aos seus servidores web que:
- Use HTTP para redirecionar clientes para um URL HTTPS
- Use HTTPS para atender diretamente os clientes
Observação: modifique os exemplos de configurações a seguir com base em sua configuração e caso de uso.
Servidores Apache: Método de arquivo de host virtual
É uma prática recomendada usar o método a seguir para configurar seus servidores web:
-
Abra seu 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).
-
Adicione uma regra de reescrita à seção VirtualHost do seu arquivo de configuração semelhante à seguinte:
<VirtualHost *:80>RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>
-
Salve seu arquivo de configuração do Apache.
-
Reinicie o Apache.
Servidores Apache: método de arquivo.htaccess
Se você não tiver acesso ao arquivo de configuração principal do Apache, use os arquivos .htaccess. Para obter mais informações, consulte a seção Quando (não) usar arquivos.htaccess na página Tutorial do Apache HTTP Server: arquivos .htaccess no site da Apache.
Para configurar seus servidores web, conclua as seguintes etapas:
-
Abra seu 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).
-
Edite a diretiva Directory para ativar .htaccess:
<Directory "/var/www/html"> Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
-
Salve seu arquivo de configuração do Apache.
-
Abra seu arquivo .htaccess.
-
Adicione uma regra de reescrita semelhante à seguinte:
RewriteEngine OnRewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
-
Salve seu arquivo .htaccess.
-
Reinicie o Apache.
Servidores NGINX
Observação: essa resolução se aplica ao NGINX 1.10.3 (Ubuntu) e ao NGINX 1.12.1 (Amazon Linux).
Conclua as etapas a seguir:
-
Abra seu arquivo de configuração do NGINX (nginx.conf).
-
Adicione a seguinte regra de reescrita. Certifique-se de modificar a regra de reescrita para sua configuração:
server { listen 80;
server_name _;
if ($http_x_forwarded_proto = 'http'){
return 301 https://$host$request_uri;
}
}
-
Reinicie o NGINX.
Servidores IIS
Observação: essa resolução se aplica ao Microsoft Windows Server 2012 R2 e 2016 Base.
Conclua as etapas a seguir:
-
Instale o módulo de reescrita de URL do IIS. Para obter mais informações, consulte Reescrita de URL no site da Microsoft.
-
Abra seu arquivo web.config.
-
Adicione a seguinte regra de reescrita à seção <system.webServer>. Modifique a regra de reescrita para 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>
-
Salve seu arquivo web.config.
-
Abra o IIS Manager.
-
Atualize o site padrão.
-
Verifique se sua nova regra de reescrita aparece na seção Reescrita de URL.
-
Reinicie seu site.
-
Verifique se o redirecionamento funciona.
Informações relacionadas
Por que recebo um erro HTTP 5xx quando me conecto a servidores web executados em instâncias do EC2 configuradas para usar o Classic Load Balancing?