19 septembre 2024 Frédéric Gilson

Comment configurer Ghost CMS derrière un reverse proxy ?

Voyons comment configurer correctement votre reverse proxy Nginx et Ghost CMS pour qu'ils fonctionnent entièrement via HTTPS.

Lors de la mise en place d’une instance de Ghost CMS, j’ai été confronté à un petit problème concernant ma configuration réseau sur mon serveur dédié. J’utilise plusieurs VMs connectées à une VM routeur qui distribue la connexion internet. Une de ces VMs reçoit tout le trafic pour les ports 80 & 443, il s’agit de mon reverse proxy Nginx qui lui-même proxy la connexion vers les différentes VMs « serveurs ».

Comme vous l’avez peut-être deviné, une machine virtuelle exécute une distribution Linux qui alimente Ghost CMS. La distribution utilisée est Ubuntu car c’est celle utilisée dans la documentation Ghost (et probablement la mieux prise en charge).

Ghost CMS fonctionne avec une application nodeJS qui génère tous les fichiers et les sert via le port 2368 par défaut. Il n’écoute pas 80 ou 443 pour des raisons de simplicité et de sécurité. C’est pourquoi la documentation nécessite une installation de nginx sur l’hôte pour se connecter à 127.0.0.1:2368. De cette façon, c’est nginx qui gère en tant que proxy inverse toutes les négociations SSL si vous souhaitez utiliser HTTPS (utilisez-le !).

Et c’est là que les problèmes commencent pour ma configuration, car cela implique un reverse proxy sur un reverse proxy. Ce qui ne fonctionne pas bien avec la redirection HTTP et la fonctionnalité de prévisualisation de Ghost CMS.

Si vous avez déjà installé Ghost CMS et le stack nécessaire. Il est fort probable que vous ayez installé Nginx avant Ghost et que vous ayez saisi le domaine de votre site Web lorsque cela vous a été demandé lors de la configuration. Vous avez peut-être même utilisé HTTPS lors de cette configuration. Derrière un reverse proxy, la saisie du HTTPS aurait très probablement échoué.

Maintenant, vous avez installé Ghost CMS avec le Nginx local configuré. Votre premier réflexe serait de configurer le Nginx principal pour qu’il serve de proxy à celui de Ghost. Vous pouvez accéder à votre site Web de cette façon, mais un problème se montre rapidement  si vous avez configuré des certificats SSL sur votre Nginx principal (et que vous accédez donc au site Web via HTTPS). Vous ne pouvez pas avoir d’aperçu du site dans le tableau de bord d’administration car Ghost CMS essaie avec HTTP et ne peut pas gérer la redirection.

La solution consiste à contourner le reverse proxy local et à utiliser uniquement votre reverse proxy principal pour Ghost. Le problème est que Ghost CMS écoute la connexion sur 127.0.0.1:2368 qui n’est pas accessible par votre Nginx principal. Vous devez demander à Ghost d’écouter sur 0.0.0.0:2368.

Maintenant, faisons toutes ces configurations.

Connectez-vous à votre serveur hébergeant votre reverse proxy.

D’abord, créez un fichier de config dans /etc/nginx/sites-available/.

Vous pouvez le nommer de n’importe quelle manière mais j’utilise le domaine qu’il écoute comme nom de fichier comme la plupart des administrateurs Nginx. (ex: blog.causticlabz.net)

Dans votre fichier, mettez la configuration suivante :

server {
# Replace all instance of blog.causticlabz.net with your own domain

listen 80;
listen [::]:80; # If you use IPv6

server_name blog.causticlabz.net;

access_log /var/log/nginx/blog.causticlabz.net.log;

client_max_body_size 50M; # Enable file upload with a limit of 50Mb

location / {
include proxy_params; # Include proxy paramaters needed, the same as the one explicitly written by Ghost CMS config
proxy_pass http://192.168.1.2:2368$request_uri; # Replace with the IP of your server hosting Ghost CMS
}
}

Notez que j’ai configuré le porte d’écoute sur 80. J’utilise Let’s Encrypt pour mes certificats SSL et il configure automatiquement la partie HTTPS (443).

Étant donné que Nginx utilise deux dossiers contenant les fichiers de configuration des sites disponibles et activés, nous devons également placer le fichier de configuration dans le dossier activé. Vous pouvez le copier, mais cela implique deux fichiers à gérer. Nous allons donc créer un lien symbolique pour avoir un fichier présent dans les deux dossiers.

sudo ln -s /etc/nginx/sites-available/blog.causticlabz.net /etc/nginx/sites-enabled/blog.causticlabz.net

Pour configurer vos certificats SSL avec Let’s Encrypt, installez d’abord « Certbot » si vous ne l’avez pas déjà.

sudo apt install certbot python3-certbot-nginx

Maintenant, utilisez Certbot pour configurer vos certificats.

sudo certbot --nginx -d blog.causticlabz.net

Remplacez par votre domaine, notez que si vous utilisez le sous-domaine www, vous devez ajouter à la commande « -d www.votredomaine.com » ou tout autre domaine et sous-domaine à configurer.

Certbot renouvellera également automatiquement les certificats lorsqu’ils sont sur le point d’expirer. Si c’est la première fois que vous utilisez Certbot, il vous demandera une adresse e-mail pour envoyer des alertes si nécessaire, puis vous demandera d’accepter le CLUF.

Certbot vous demandera comment configurer le fichier de configuration pour Nginx, s’il doit activer la redirection ou non. Bien entendu, l’objectif de cet exercice est d’activer la redirection. Choisissez donc en conséquence.

Certbot contactera ensuite le serveur Let’s Encrypt, configurera les certificats SSL et les ajoutera à votre configuration Nginx.

Tout est prêt pour votre reverse proxy principal.

Il est temps de configurer Ghost CMS. Connectez-vous au serveur qui l’héberge.

Changez de répertoire pour celui qui héberge votre Ghost CMS. Ensuite, exécutez la commande suivante :

ghost config set server.host 0.0.0.0

C’est tout ! Vous devriez maintenant pouvoir accéder à votre instance de Ghost CMS via HTTPS avec tout qui fonctionne correctement à l’intérieur. Si vous avez des questions ou des commentaires, n’hésitez pas à me contacter. Il est maintenant temps de commencer à écrire des articles sur votre CMS !

  • Share:
, , ,

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *