Comment mettre le site wordpress derrière l'équilibreur de charge AWS
Nous avons un ancien site wordpress hébergé sur un serveur Linux AWS EC2 que j'essaie de placer derrière un équilibreur de charge afin de pouvoir utiliser HTTPS et WAF. Je suis un administrateur système un peu expérimenté mais je suis très nouveau sur wordpress. J'ai du mal à charger le contenu via HTTPS tout en n'entrant pas dans une boucle de redirection entre l'équilibreur de charge et le serveur.
J'ai la configuration de l'équilibreur de charge pour parler au serveur sur le port 80 et si WP_SITEURL/WP_HOME est défini sur http://, j'obtiens un tas d'erreurs de contenu mixte dans la console de développement chrome car il essaie de charger des scripts et css sur http. Si je change WP_SITEURL/WP_HOME en https://, cela crée une boucle de redirection car wordpress continue d'essayer de rediriger l'équilibreur de charge, qui essaie de communiquer sur le port 80, vers https.
Existe-t-il un moyen de permettre à l'équilibreur de charge d'atteindre le serveur sur le port 80 tout en conservant l'URL de base pour les ressources, les scripts, etc., être https ?
Réponses
Lorsque WordPress est derrière le proxy https (votre équilibreur de charge), il ne sait pas que https est activé. Le proxy fonctionne via https (port 443) mais la communication entre le proxy et WordPress se fait via http (port 80). Pour WordPress, le trafic passe par http, c'est pourquoi vous obtenez une boucle de redirection de https vers http (par WordPress) et de nouveau de http vers https (par proxy). Vous devez forcer WordPress à commencer à travailler sur https.
Collez cette ligne dans votrewp-config.php
$_SERVER['HTTPS'] = 'on';
Parfois, les proxies envoyaient un en-tête supplémentaire HTTP_X_FORWARDED_PROTO
à WordPress pour faire savoir que le trafic d'origine était sur https. Vous pouvez l'utiliser pour être un peu plus flexible
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
Changer WP_SITEURL
et WP_HOME
utiliser https. Et remplacez tous les liens de la base de données par https.
Référence:https://developer.wordpress.org/reference/functions/is_ssl/