Forçar HTTPS com o balanceador de carga do AWS Elastic

7

Preciso redirecionar todo o tráfego HTTP de entrada para HTTPS no meu balanceador de carga elástico.

Estou cansado de usar o mod_rewrite do Apache:

 RewriteEngine On
 RewriteCond %{HTTP:X-Forwarded-Proto} !https
 RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Aproveitando o cabeçalho X-Forwarded-Proto adicionado pelo balanceador de carga, essa regra deve instruir o navegador do usuário a solicitar a versão HTTPS da mesma URL.

Até agora Não funciona (nenhum redirecionamento acontece).

O que estou fazendo de errado?

Existe uma maneira melhor de fazer isso?

EDITAR:

Isso acabou funcionando:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
    
por panos2point0 29.11.2012 / 11:40

3 respostas

5

Então eu suponho que você tenha o ELB configurado para aceitar tráfego tanto no HTTP / 80 quanto no HTTPS / 443, mas redirecione tudo para HTTP.

Se você quiser usar seu método (que é inteligente), tem certeza de que o que obtém não é %{X-Forwarded-Proto} - o prefixo HTTP: parece estranho para mim. Fora isso, isso parece certo para mim.

Se isso estiver em um host virtual ou na configuração principal do servidor e ainda não estiver funcionando, você poderá adicionar

RewriteLog rewrite-log
RewriteLogLevel 3

veja o arquivo rewrite-log para ver o que realmente está acontecendo. Este arquivo pode ser incrivelmente detalhado, comece com níveis mais baixos. O log não pode ser iniciado a partir de .htaccess files.

(Sugiro que você faça os sinalizadores em RewriteRule [R=301,L] , o que fará com que o servidor envie uma resposta 301, que instrua os mecanismos de pesquisa a considerarem o redirecionamento permanente e atualize seus links de acordo.)

    
por 29.11.2012 / 21:13
1

Só queria adicionar minha experiência enquanto lutava por horas antes de perceber que meu arquivo de pulsação tinha um ponto sem escape (/alive.html). Duh.

O segundo problema foi que o domínio principal não estava redirecionando, mas os arquivos estavam. Por isso, o link estava redirecionando para o link , mas link não foi.

Aqui está o que eu coloquei no meu arquivo .htaccess que funcionou para mim:

RewriteEngine On
# SSL connection forced
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/alive\.html$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
    
por 13.08.2014 / 07:02
1

No meu caso, o problema foi que a condição! https estava quebrando a verificação de integridade.

alterando a condição para ^ http $ fez com que funcionasse

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$

descobriu que aqui: link

    
por 19.10.2015 / 00:51