Endless Redirect Loop com o AWS ELB e o wordpress site usando o wordpress https plugin

10

Eu configurei um ELB da AWS para apontar para o meu Ubuntu Server executando o Wordpress 3.2.1. Tudo funcionou bem no servidor até que eu o coloquei atrás de um balanceador de carga.

Configurei o balanceador de carga para encaminhar a porta 80 para a porta 80 e a porta 443 para a porta 80.

Eu configurei meu arquivo de hosts virtuais para verificar os cabeçalhos do elb:

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

Agora, sempre que vou para uma URL https, recebo esta mensagem:

This webpage has a redirect loop
The webpage at https://mywebsite.com/securepage/ has resulted in too many redirects

Assim que desabilitar o plugin do wordpress https | ( link )
As páginas funcionam, mas agora estão cheias de conteúdo misto. páginas que deveriam ser https não são mais https.

Assim que eu acessar o servidor diretamente, em vez de usar o elb, ele funciona novamente.

Alguma idéia de como eu poderia fazer isso funcionar com um AWS ELB?

    
por ChickenFur 24.08.2011 / 20:07

6 respostas

13

Eu arriscaria um palpite sem que você postasse sua configuração do ELB de que o ELB está redirecionando o tráfego HTTPS (443 / tcp) para a instância do EC2 no HTTP (80 / tcp). Então você está .htaccess e o plugin está tentando redirecioná-lo de volta para HTTPS porque está sendo visto em HTTP.

Dê uma olhada no seu console do EC2 em Network & Security > Load Balancers e imagino que você verá o Port Configuration dizendo algo nos termos de 443 forwarding to 80 (HTTPS, Certificate: blah)

    
por 25.08.2011 / 00:36
15

Tente adicionar isso ao seu httpd.conf ou um .htaccess

SetEnvIfNoCase X-FORWARDED-PROTO "^https$" HTTPS

Ao usar o balanceador de carga + HTTPS, o seu servidor da web não está ciente de que o HTTPS está sendo usado no front end, então continua tentando redirecionar para o site HTTPS, quando, na verdade, o HTTPS já está sendo usado.

O texto acima irá traduzir o cabeçalho que o Balanceador de Carga da Amazon envia ( X-Forwarded-Proto: https ) para uma variável de ambiente que o Wordpress e outros scripts PHP entendem ( HTTPS=1 )

    
por 08.06.2015 / 08:05
3

De acordo com a Amazon, aqui link , a correção é:

/** Detect if SSL is used. This is required since we are terminating SSL either on CloudFront or on ELB */ 
if (($_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] == 'https') OR ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
    {$_SERVER['HTTPS']='on';}

Eu ainda terminei com o loop infinito, então mudei minha configuração do WordPress a partir de:

define('WP_HOME','http://www.example.com');
define('WP_SITEURL','http://www.example.com');

para:

define('WP_HOME','https://www.example.com');
define('WP_SITEURL','https://www.example.com');

Isso forçará os usuários a https, mesmo que eles digitam http, além de facilitar o desenvolvimento do site off-line, pois basta atualizar o WP_HOME para o host local e o https não é mais o padrão

    
por 09.12.2015 / 10:13
1

Citando a mim mesmo a partir de outro post útil link :

For me it was sufficient to set $_SERVER['HTTPS']='on'; in wp-config.php. I'm using AWS ELB which terminates SSL on the ELB. Therefore nginx accepts the request on Port 80 (8080 after varnish) and it seems like wordpress was not able to deal with it until you explicitly tell PHP that the site already uses https...

Para o listener ELB não SSL, uso uma configuração separada para redirecionar todo o tráfego para https como ouvinte padrão.

    
por 05.01.2018 / 17:13
0

Como @Tim sugeriu, esse $_SERVER['HTTPS']='on'; em wp-config.php fez o truque para mim.

Também adicionei isso ao meu arquivo .htaccess para forçar o HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
    
por 30.04.2018 / 22:55
0

Corrigir muitos problemas de redirecionamento no aws ALB

Habilite o módulo de cabeçalho e adicione a seguinte entrada na configuração do apache

SetEnvIf X-Forwarded-Proto "https" HTTPS = ativado         RequestHeader setado HTTPS "on" env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
por 29.06.2018 / 20:21