virginia tutorial services para lightsail español east aws wordpress amazon-web-services amazon-ec2 https amazon-elb

wordpress - tutorial - us east virginia aws



¿Cómo solucionar problemas de Wordpress HTTPS cuando está detrás de Amazon Load Balancer? (5)

He tenido este problema antes. Al ejecutar Wordpress (u otras secuencias de comandos PHP) detrás de EC2 Load Balancer de Amazon, las secuencias de comandos no se dan cuenta de que se están ejecutando en el protocolo https: // y dan como resultado ciclos de redirección sin fin y advertencias HTTPS ("Algunos contenidos sobre este la página se solicita de forma no segura ... ").

Encontré una solución aquí, pero requiere modificar el núcleo de Wordpress, que no sirve para la actualización: https://wordpress.org/support/topic/when-behind-amazon-web-services-elastic-load-balancer-causes-endless-redirect

¿Hay alguna manera de arreglar esto sin modificar el núcleo de Wordpress? Estoy usando Apache 2.2.


En caso de que alguien más esté buscando el equivalente de Nginx a esto, esto es lo que debe hacer:

Para la configuración de reescritura, debe agregar lo siguiente debajo del bloque de server :

if ($http_x_forwarded_proto != ''https'') { rewrite ^ https://$host$request_uri? permanent; }

Y para configurar el parámetro HTTPS, debe agregar lo siguiente debajo de la location ~ /.php$ block:

if ($http_x_forwarded_proto = ''https'') { set $fe_https ''on''; } fastcgi_param HTTPS $fe_https;

Recuerda eliminar cualquier otro comando fastcgi_param HTTPS si tienes alguno (lo tenía en mi archivo fastcgi_params ).


Ninguno de los anteriores resolvió los errores de contenido mixto desafortunadamente para mí. Sin embargo, lo que funcionó fue agregar el protocolo a las variables WP_HOME && WP_SITEURL en wp-config.php, por ejemplo

define( ''WP_HOME'', ''https://'' . $_SERVER[''HTTP_HOST'']); define( ''WP_SITEURL'', WP_HOME );

Después de eso, todas las URL en la fuente comenzaron con https y todos los errores de contenido mixto desaparecieron.


Otra opción de la documentación de wordpress es agregar esto a su wp-config.php:

if (strpos($_SERVER[''HTTP_X_FORWARDED_PROTO''], ''https'') !== false) $_SERVER[''HTTPS'']=''on'';


Utilice este método de 4 pasos para eliminar el bucle de redirección y los problemas de contenido mixto cuando use ssl en wordpress.

1) Reemplazar ''http: //'' con ''//'' en la base de datos: esto crea todas las url relativas para imágenes y otros activos

2) en wp-config, defina las variables genéricas wp_home y wp_siteurl.

define(''WP_HOME'',''//''. $_SERVER[''SERVER_NAME'']); define(''WP_SITEURL'',''//''. $_SERVER[''SERVER_NAME'']);

3) Si está utilizando el equilibrador de carga, use la variable de servidor ''HTTP_X_FORWARDED_PROTO'' para descubrir el protocolo utilizado. Para hacer esto, agregue esta línea en wp-config

if (strpos($_SERVER[''HTTP_X_FORWARDED_PROTO''], ''https'') !== false) $_SERVER[''HTTPS'']=''on'';

4) Finalmente en .htaccess, use esta línea si está detrás de loadbalancer para redirigir todo el tráfico a https.

# http to https RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]


Como sugirió el enlace que brindó, para Wordpress el problema radica en la función is_ssl() , que al igual que la mayoría del software PHP verifica explícitamente $_SERVER[''HTTPS''] y $_SERVER[''SERVER_PORT''] para verificar si se está actualizando la página. accedido en el contexto https: //.

Cuando se accede a su página a través de HTTPS, pero Amazon Load Balancer realiza la descarga de SSL y realmente solicita su contenido en el puerto 80 que no es SSL, el servidor web, PHP o cualquier otra cosa no comprende o ve que se está accedido sobre https: //.

La solución para esto, es que el ELB de Amazon envía el encabezado HTTP de facto X-Forwareded-Proto estándar, que podemos utilizar para descubrir qué protocolo el cliente está usando realmente en el otro lado del Load Balancer.

Con Apache 2.2, podrías usar algo como:

<IfModule mod_setenvif.c> SetEnvIf X-Forwarded-Proto "^https$" HTTPS </IfModule>

Esto simplemente lee el encabezado X-Forwared-Proto , y si es igual a https , establece la variable de entorno HTTPS en 1 . PHP verá esta variable de entorno, y eventualmente se convertirá en $_SERVER[''HTTPS''] que equivale a 1 , como lo sería para una solicitud SSL nativa "real".