Inicio | Wordpress sobre Reverse Proxy + SSL

Wordpress + mod_proxy + ssl

Lunes, 22 de Julio de 2013 09:06

Aunque colocar un Wordpress tras un un Reverse Proxy (Proxy Inverso) con SSL, no sea lo más habitual, si es un buena configuración de la que parten muchos hostings.

El problema que tras activar las opciones de SSL en este escenario pueden presentarse diversas patologias como el “Redirect Loop” (ERR_TOO_MANY_REDIRECTS) o simplemente que la autenticación en nuestro wp-admin sea imposible.

Para ello desde Wordpress se recomienda insertar el siguiente código en el archivo wp-config.php

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';

Personalmente aunque los FORCE_SSL_ADMIN y FORCE_SSL_LOGIN cumplen el cometido de activar SSL, no es suficiente para solucionar los problemas con SSL y el Reverse Proxy.

Para ir solucionando puntos, primero debemos incluir la directiva:

RequestHeader set X-Forwarded-Proto "https"

En el host virtual del apache donde se configura nuestro proxy.

En segundo lugar la sentencia:

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS']='on';

Por mi parte no me funciona y le he eliminado, sustituyéndola por lo siguiente:

Debemos ir al archivo "wp-includes/functions.php" y localizar la función is_ssl(), la comentamos entera, y la sustituimos por una nueva versión parcheada (perteneciente a un antiguo parche del WP):

function is_ssl() {
 if ( isset($_SERVER['HTTPS']) ) {
                if ( 'on' == strtolower($_SERVER['HTTPS']) )
                        return true;
                if ( '1' == $_SERVER['HTTPS'] )
                        return true;
} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
                return true;
}
if ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https' ) { return true; } return false; }

Para activar y desactivar SSL, ya sea a través de la parte publica o privada (wp-admin) de WP, el plugin WordPress HTTPS funciona correctamente con este parche y sobre el proxy inverso, así ya no tendremos nada que cambiar en wp-confing, solo actualizar la función is_ssL()

x-rite gestiondecolor.es Professional LED Lighting, DSLR Support and Accessories for Photo and Video BabelColor