Loop de redirecionamento infinito com o AWS ELB e o site wordpress usando o plugin https do wordpress

11

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

Eu 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 a um URL https, recebo esta mensagem:

Esta página da Web possui um loop de redirecionamento
A página da Web em https://mywebsite.com/securepage/ resultou em muitos redirecionamentos

Assim que desabilito o plugin https do wordpress
( http://wordpress.org/extend/plugins/wordpress-https/ )
As páginas funcionam, mas agora estão cheias de conteúdo misto. as páginas que deveriam ser https não são mais https.

Assim que eu acessar o servidor diretamente, em vez de através do elb, ele funcionará novamente.

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

Frango
fonte
você atualizou o permalink? Normalmente nós temos que atualizar a configuração permalink no wordpress
user905953

Respostas:

13

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

Vá dar uma olhada no seu console EC2 abaixo Network & Security > Load Balancerse eu imagino que você verá o que Port Configurationdiz algo ao longo das linhas de443 forwarding to 80 (HTTPS, Certificate: blah)

Jeremy Bouse
fonte
1
Essa pessoa aqui estava tendo o mesmo problema. forums.aws.amazon.com/…
ChickenFur
1
e este é semelhante stackoverflow.com/questions/5741210/...
ChickenFur
o seu direito Estou encaminhando 443 para 80.
ChickenFur
Estou dirigindo um dos meus clientes na AWS há mais de dois anos ... Quando li sua pergunta, foi a primeira coisa que me veio à cabeça como suspeito.
Jeremy Bouse
1
Alterar o LB para apontar de 443 para 443 corrigiu :) Obrigado!
ChickenFur
17

Tente adicionar isso ao seu httpd.confou a um.htaccess

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

Ao usar o balanceador de carga + HTTPS, seu servidor da web não sabe que o HTTPS está sendo usado no front-end; portanto, tente redirecionar para o site HTTPS, quando, de fato, o HTTPS já está sendo usado.

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

AB Carroll
fonte
3
Esta seria a maneira correta fazê-lo, como restos SSL descriptografia no ELB
Toske
1
Se você estiver em nginx, além semelhante seria:fastcgi_param HTTPS on;
Akash Budhia
Este post terminou a minha hora de duração dor ... THX
Daywalker
3

De acordo com a Amazon aqui https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf, 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 acabei 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 se digitarem http, além de facilitar o desenvolvimento do site offline, porque você acabou de atualizar o WP_HOME para o host local e https não é mais o padrão

brianlmerritt
fonte
1

Citando-me de outra publicação útil /server//a/858308/450836 :

Para mim, foi suficiente definir $ _SERVER ['HTTPS'] = 'on'; em wp-config.php. Estou usando o AWS ELB que termina o SSL no ELB. Portanto, o nginx aceita a solicitação na porta 80 (8080 após verniz) e parece que o wordpress não conseguiu lidar com isso até que você explicitamente dissesse ao PHP que o site já usa https ...

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

Tim
fonte
0

Como o @Tim sugeriu, isso $_SERVER['HTTPS']='on';no 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]
Jordânia
fonte
0

Correção para muitos problemas de redirecionamento no aws ALB

Ative o módulo header e adicione a seguinte entrada na configuração do apache

SetEnvIf X-Forwarded-Proto "https" HTTPS = no RequestHeader defina HTTPS "em" env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
George Ulahannan
fonte