WordPress : Deplacer son site de HTTP vers HTTPS derrière un proxy

W

Si un de vos sites se trouve derrière un proxy (Nginx, HAProxy,…) vous risquez d’avoir quelques difficultés à configurer correctement votre wordpress. La documentation officielle (le codex) l’explique très rapidement.

L’objectif de ce tutoriel :

  • Avoir un site WordPress capable de répondre en HTTP & HTTPS
  • Forcer le back-office à ne répondre que en HTTPS
  • Enfin, migrer tout le site uniquement sur du HTTPS.

L’infra que j’utilise pour la démonstration est basée sur 4 containers docker:

  • Un container NGINX configuré en reverse-proxy.
  • Un container Apache / PHP 7.2 avec l’application wordpress.
  • Un container MySQL
  • Un Container Let’s Encrypt utilisé pour générer le certificat et le renouveler.

La partie let’s encrypt sera l’objet d’un autre tutoriel. Cette configuration n’entre pas dans le scope de ce tuto.

Quel est le problème de départ ?

Si l’ensemble de votre chaîne est en HTTPS,tout devrait bien se passer. Si ce n’est pas le cas, vous pouvez suivre tout de meme ce tuto, qui devrait vous donner des infos utiles.

Si comme moi, la partie SSL est gérée par un proxy, et que les applications derrière, fonctionnent en HTTP, vous aller rencontrer des problèmes. En effet, l’opération classique visant à indiquer à wordpress via son site URL et homepage URL que vous êtes sur du HTTPS, va avoir pour effet de générer une redirection infinie vers du HTTPS.

C’est logique, votre proxy va communiquer avec wordpress en HTTP. Si ce dernier est configuré pour etre en HTTPS, il va automatiquement (et bêtement), rediriger en HTTPS, ce que va faire le proxy, qui va re-transmettre la requête en HTTP à wordpress, qui va rediriger en HTTPS… et ça boucle… et ça boucle…

Etape 1 : Les headers de votre proxy

D’abord, vérifiez les headers de votre proxy afin de vérifier qu’ils transmettent les X-FORWARDED-FOR ou/et X-FORWARDED-HOST.

X-FORWARDED-FOR Donne l’ip du demandeur, et non celle du proxy qui fait suivre la requête.
X-FORWARDED-HOST Donne l’host du demandeur et non celui du proxy.

La présence d’un de ces deux headers, est, en général, le signe que votre application est derrière un proxy.

Exemple de configuration dans NGINX :

Etape 2 : Configurer votre wordpress

Ce point est assez simple, il suffit d’ajouter le bout de code suivant dans votre fichier de configuration wp-config.php.

Ce morceaux de code va identifier la présence des headers du proxy pour forcer la configuration en HTTPS.

Etape 3 : Forcer l’admin en HTTPS

Enfin, pour forcer l’admin de wordpress en HTTPS, ajoutez la ligne suivante dans votre fichier de configuration wp-config.php

 

Etape 4 : Rediriger le traffic HTTP vers HTTPS

Si vous utilisez Nginx, le plus simple est d’ajouter la configuration suivante :

Le tuto pas à pas en vidéo ;

 

 

About the author

Eric Wallet

Add comment

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

By Eric Wallet

Commentaires récents

Étiquettes