Cómo poner el sitio de wordpress detrás del balanceador de carga de AWS

Aug 18 2020

Tenemos un antiguo sitio de WordPress alojado en un servidor AWS EC2 Linux que estoy tratando de colocar detrás de un balanceador de carga para poder usar HTTPS y WAF. Soy un administrador de sistemas algo experimentado pero soy muy nuevo en wordpress. Tengo problemas para que el contenido se cargue a través de HTTPS y, al mismo tiempo, no entro en un bucle de redireccionamiento entre el balanceador de carga y el servidor.

Tengo la configuración del balanceador de carga para hablar con el servidor en el puerto 80 y si WP_SITEURL/WP_HOME está configurado en http://, obtengo un montón de errores de contenido mixto en la consola de desarrollo de Chrome porque está intentando cargar scripts y css sobre http. Si cambio WP_SITEURL/WP_HOME a https://, crea un bucle de redirección porque wordpress sigue intentando redirigir el balanceador de carga, que intenta comunicarse en el puerto 80, a https.

¿Hay alguna manera de permitir que el balanceador de carga llegue al servidor en el puerto 80 mientras aún tiene la URL base para recursos, scripts, etc., sea https?

Respuestas

1 kierzniak Aug 27 2020 at 23:59

Cuando WordPress está detrás del proxy https (su balanceador de carga), no sabe que https está habilitado. El proxy funciona a través de https (puerto 443), pero la comunicación entre el proxy y WordPress se realiza a través de http (puerto 80). Para el tráfico de WordPress es a través de http, es por eso que obtiene un bucle de redireccionamiento de https a http (por WordPress) y nuevamente de http a https (por proxy). Debe obligar a WordPress a comenzar a trabajar en https.

Pegue esta línea en suwp-config.php

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

A veces, los proxies enviaban encabezados adicionales HTTP_X_FORWARDED_PROTOa WordPress para informar que el tráfico original está en https. Puedes usarlo para ser un poco más flexible.

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

Cambiar WP_SITEURLy WP_HOMEusar https. Y reemplace todos los enlaces en la base de datos a https.

Referencia:https://developer.wordpress.org/reference/functions/is_ssl/