Como colocar o site wordpress atrás do balanceador de carga da AWS

Aug 18 2020

Temos um site wordpress antigo hospedado em um servidor linux AWS EC2 que estou tentando colocar atrás de um balanceador de carga para poder usar HTTPS e WAF. Eu sou um administrador de sistema um tanto experiente, mas sou muito novo no wordpress. Estou tendo problemas para carregar o conteúdo por HTTPS e, ao mesmo tempo, não entrar em um loop de redirecionamento entre o balanceador de carga e o servidor.

Eu tenho a configuração do balanceador de carga para falar com o servidor na porta 80 e se WP_SITEURL/WP_HOME estiver definido como http://, recebo vários erros de conteúdo misto no console de desenvolvimento do chrome porque ele está tentando carregar scripts e css http. Se eu mudar WP_SITEURL/WP_HOME para https://, ele cria um loop de redirecionamento porque o wordpress continua tentando redirecionar o balanceador de carga, que está tentando se comunicar na porta 80, para https.

Existe uma maneira de permitir que o balanceador de carga alcance o servidor na porta 80 enquanto ainda possui o URL base para recursos, scripts etc., seja https?

Respostas

1 kierzniak Aug 27 2020 at 23:59

Quando o WordPress está atrás do proxy https (seu balanceador de carga), ele não sabe que o https está habilitado. O proxy funciona por meio de https (porta 443), mas a comunicação entre o proxy e o WordPress é feita por meio de http (porta 80). Para WordPress, o tráfego é através de http, é por isso que você obtém um loop de redirecionamento de https para http (pelo WordPress) e novamente de http para https (por proxy). Você precisa forçar o WordPress a começar a trabalhar em https.

Cole esta linha em seuwp-config.php

$_SERVER['HTTPS'] = 'on';

Às vezes, os proxies enviam um cabeçalho adicional HTTP_X_FORWARDED_PROTOao WordPress para informar que o tráfego original está em https. Você pode usá-lo para ser um pouco mais flexível

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}

Alterar WP_SITEURLe WP_HOMEusar https. E substitua todos os links no banco de dados por https.

Referência:https://developer.wordpress.org/reference/functions/is_ssl/