Boucle de redirection sans fin avec AWS ELB et site wordpress utilisant le plugin wordpress https

11

J'ai configuré un AWS ELB pour pointer vers mon serveur Ubuntu exécutant Wordpress 3.2.1. Tout fonctionnait très bien sur le serveur jusqu'à ce que je le mette derrière un équilibreur de charge.

J'ai configuré l'équilibreur de charge pour transférer le port 80 vers le port 80 et le port 443 vers le port 80.

J'ai configuré mon fichier d'hôtes virtuels pour vérifier les en-têtes de l'elb:

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

Maintenant, chaque fois que je vais sur une URL https, je reçois ce message:

Cette page Web a une boucle de redirection
La page Web à https://mywebsite.com/securepage/ a entraîné trop de redirections

Dès que j'ai désactivé le plugin wordpress https
( http://wordpress.org/extend/plugins/wordpress-https/ )
Les pages fonctionnent mais sont maintenant pleines de contenu mixte. les pages qui devraient être https ne sont plus https.

Dès que j'accède au serveur directement au lieu de passer par le coude ça marche à nouveau.

Avez-vous des idées sur la façon de faire fonctionner cela avec un AWS ELB?

PouletFourrure
la source
avez-vous mis à jour le permalien? généralement, nous devons mettre à jour le paramètre de permalien sur wordpress
user905953

Réponses:

13

Je risquerais de deviner sans que vous publiez votre configuration ELB que l'ELB redirige le trafic HTTPS (443 / tcp) vers l'instance EC2 sur HTTP (80 / tcp). Ensuite, vous .htaccesset le plugin essayez de le rediriger vers HTTPS car il est vu sur HTTP.

Allez jeter un œil à votre console EC2 sous Network & Security > Load Balancerset j'imagine que vous verrez le Port Configurationdit quelque chose dans le sens de443 forwarding to 80 (HTTPS, Certificate: blah)

Jeremy Bouse
la source
1
Cette personne ici avait le même problème. forums.aws.amazon.com/…
ChickenFur
1
et celui-ci ressemble à stackoverflow.com/questions/5741210/…
ChickenFur
votre droite
j'envoie
Je dirige l'un de mes clients sous AWS depuis plus de 2 ans maintenant ... Quand j'ai lu votre question, c'est la première chose qui m'est venue à l'esprit en tant que suspect.
Jeremy Bouse
1
Changer le LB pour pointer de 443 à 443 l'a corrigé :) Merci!
ChickenFur
17

Essayez d'ajouter ceci à votre httpd.confou à un.htaccess

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

Lorsque vous utilisez l'équilibreur de charge + HTTPS, votre serveur Web ne sait pas que HTTPS est utilisé sur le frontal, il continue donc d'essayer de rediriger vers le site HTTPS, alors qu'en fait, HTTPS est déjà utilisé.

Ce qui précède traduira l'en-tête que Load Balancer d'Amazon envoie ( X-Forwarded-Proto: https) en une variable d'environnement que Wordpress et d'autres scripts PHP comprennent ( HTTPS=1)

AB Carroll
la source
3
Ce serait une manière correcte de le faire, car le déchiffrement SSL reste sur ELB
toske
1
Si vous êtes sur nginx, un ajout similaire serait:fastcgi_param HTTPS on;
Akash Budhia
Cet article a mis fin à ma douleur d'une heure ... THX
Daywalker
3

Selon Amazon ici https://d0.awsstatic.com/whitepapers/deploying-wordpress-with-aws-elastic-beanstalk.pdf, le correctif est:

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

Je me suis quand même retrouvé avec la boucle sans fin, j'ai donc changé ma configuration WordPress à partir de:

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

à:

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

Cela forcera les utilisateurs à https, même s'ils tapent http, et cela facilite le développement du site hors ligne car vous mettez simplement à jour WP_HOME sur l'hôte local et https n'est plus la valeur par défaut

brianlmerritt
la source
1

Me citant d'un autre article utile /server//a/858308/450836 :

Pour moi, il suffisait de mettre $ _SERVER ['HTTPS'] = 'on'; dans wp-config.php. J'utilise AWS ELB qui met fin à SSL sur l'ELB. Par conséquent, nginx accepte la demande sur le port 80 (8080 après le vernis) et il semble que wordpress n'a pas pu y faire face jusqu'à ce que vous disiez explicitement à PHP que le site utilise déjà https ...

Pour l'écouteur ELB non SSL, j'utilise une configuration distincte pour rediriger tout le trafic vers https comme écouteur par défaut.

Tim
la source
0

Comme l'a suggéré @Tim, cela $_SERVER['HTTPS']='on';dans wp-config.php a fait l'affaire pour moi.

J'ai également ajouté ceci à mon fichier .htaccess pour forcer 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]
Jordan
la source
0

Correction de trop de problèmes de redirection dans aws ALB

Activer le module d'en-tête puis ajouter l'entrée suivante dans la configuration apache

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

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
George Ulahannan
la source