Endless Redirect Loop con AWS ELB e sito wordpress usando il plugin https di wordpress


11

Ho configurato un ELB AWS in modo che punti al mio server Ubuntu che esegue Wordpress 3.2.1. Tutto ha funzionato perfettamente sul server fino a quando non l'ho messo dietro un bilanciamento del carico.

Ho impostato il bilanciamento del carico per inoltrare la porta 80 alla porta 80 e la porta 443 alla porta 80.

Ho installato il mio file hosts virtuale per verificare le intestazioni dal elb:

RewriteEngine su
RewriteCond% {HTTP: X-Forwarded-Proto}! Https
RewriteRule! / Status https: //% {SERVER_NAME}% {REQUEST_URI} [L, R]

Ora ogni volta che vado a un URL HTTPS ricevo questo messaggio:

Questa pagina Web ha un ciclo di reindirizzamento
La pagina Web all'indirizzo https://mywebsite.com/securepage/ ha comportato troppi reindirizzamenti

Non appena disabilito il plugin https di wordpress
( http://wordpress.org/extend/plugins/wordpress-https/ )
Le pagine funzionano ma ora sono piene di contenuti misti. le pagine che dovrebbero essere https non sono più https.

Non appena accedo direttamente al server anziché tramite elb, funziona di nuovo.

Qualche idea su come potrei farlo funzionare con un ELB AWS?


hai aggiornato il permalink? di solito dobbiamo aggiornare l'impostazione del permalink su wordpress
user905953

Risposte:


13

Azzarderei a indovinare senza che tu pubblichi la tua configurazione ELB che ELB sta reindirizzando il traffico HTTPS (443 / tcp) all'istanza EC2 su HTTP (80 / tcp). Quindi tu .htaccesse il plugin stai provando a reindirizzarlo su HTTPS perché viene visualizzato su HTTP.

Dai un'occhiata alla tua console EC2 sotto Network & Security > Load Balancerse immagino che vedrai il Port Configurationdetto qualcosa sulla falsariga di443 forwarding to 80 (HTTPS, Certificate: blah)


1
Questa persona qui stava avendo lo stesso problema. forums.aws.amazon.com/…
ChickenFur


alla tua destra sto inoltrando 443 a 80.
ChickenFur

Gestisco uno dei miei clienti con AWS da oltre 2 anni ... Quando ho letto la tua domanda è la prima cosa che mi è venuta in mente come sospetto.
Jeremy Bouse,

1
La modifica dell'LB al punto da 443 a 443 l'ha risolto :) Grazie!
ChickenFur:

17

Prova ad aggiungere questo al tuo httpd.confo un.htaccess

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

Quando si utilizza il bilanciamento del carico + HTTPS, il server Web non è consapevole del fatto che HTTPS viene utilizzato sul front-end, quindi continua a provare a reindirizzare al sito HTTPS, quando in realtà HTTPS è già in uso.

Quanto sopra tradurrà l'intestazione che Load Balancer di Amazon invia ( X-Forwarded-Proto: https) in una variabile di ambiente che Wordpress e altri script PHP comprendono ( HTTPS=1)


3
Questo sarebbe il modo corretto di farlo, poiché la decrittografia SSL rimane su ELB
toske

1
Se sei su nginx, un'aggiunta simile sarebbe:fastcgi_param HTTPS on;
Akash Budhia,

Questo post ha terminato il mio dolore lungo un'ora ... THX
Daywalker,

3

Secondo Amazon qui https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf la soluzione è:

/** 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';}

Ho ancora finito con il loop infinito, quindi ho cambiato la mia configurazione di WordPress da:

define('WP_HOME','http://www.example.com');
define('WP_SITEURL','http://www.example.com');

per:

define('WP_HOME','https://www.example.com');
define('WP_SITEURL','https://www.example.com');

Ciò costringerà gli utenti a https, anche se digitano http, inoltre semplifica lo sviluppo del sito offline perché aggiorni WP_HOME all'host locale e https non è più l'impostazione predefinita


1

Citando me stesso da un altro utile post https://serverfault.com/a/858308/450836 :

Per me è stato sufficiente impostare $ _SERVER ['HTTPS'] = 'on'; in wp-config.php. Sto usando AWS ELB che termina SSL su ELB. Pertanto nginx accetta la richiesta sulla porta 80 (8080 dopo la vernice) e sembra che wordpress non sia stato in grado di gestirla fino a quando non si dice esplicitamente a PHP che il sito utilizza già https ...

Per il listener ELB non SSL utilizzo una configurazione separata per reindirizzare tutto il traffico su https come listener predefinito.


0

Come suggerito da @Tim, questo $_SERVER['HTTPS']='on';in wp-config.php ha fatto il trucco per me.

Ho anche aggiunto questo al mio file .htaccess per forzare 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]

0

Risolto il problema con troppi problemi di reindirizzamento in aws ALB

Abilita il modulo di intestazione, quindi aggiungi la seguente voce in apache config

SetEnvIf X-Forwarded-Proto "https" HTTPS = on RequestHeader impostare HTTPS "on" env = HTTPS

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.