Architecture IT
Configurer Ghost CMS derrière un reverse proxy Nginx
Guide pratique pour faire fonctionner Ghost CMS derrière un reverse proxy Nginx principal, avec HTTPS via Let’s Encrypt, sans casser les redirections ni l’aperçu dans l’administration Ghost.
Comment configurer Ghost CMS derrière votre propre reverse proxy
Voyons comment configurer correctement votre reverse proxy Nginx et Ghost CMS pour qu'ils fonctionnent entièrement via HTTPS.
06 fév 2022
Lors de la configuration de cette instance de Ghost CMS, j'ai rencontré un petit problème concernant ma configuration réseau sur mon serveur dédié. J'utilise plusieurs VM connectées à une VM routeur qui distribue la connexion Internet. L'une de ces VM reçoit tout le trafic pour les ports 80 et 443, c'est mon reverse proxy Nginx qui relaie lui-même la connexion vers les différentes VM "serveurs".
Comme vous l'avez peut-être deviné, une VM 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 supportée).
La façon dont Ghost CMS fonctionne est avec une application nodeJS qui génère tous les fichiers et les sert par défaut via le port 2368. Il n'écoute pas les ports 80 ou 443 pour des raisons de simplicité et de sécurité. C'est pourquoi la documentation nécessite une installation Nginx sur l'hôte pour relayer vers 127.0.0.1:2368. De cette façon, c'est Nginx qui gère en tant que reverse proxy toutes les poignées de main SSL si vous souhaitez utiliser HTTPS (utilisez-le !).
Et c'est là que les ennuis commencent pour ma configuration, car cela signifierait 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 la pile nécessaire pour cela. Il y a de fortes chances que vous ayez installé Nginx avant Ghost et que vous ayez entré le domaine de votre site Web lorsqu'on vous l'a demandé pendant la configuration. Vous avez peut-être même utilisé HTTPS pendant cette configuration. Derrière un reverse proxy, entrer l'HTTPS aurait très probablement échoué.
Maintenant, vous avez Ghost CMS installé avec le Nginx local configuré. Votre premier réflexe serait de configurer le Nginx principal pour relayer vers celui de Ghost. Vous pouvez accéder à votre site Web de cette manière, mais un problème est rapidement découvert 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 avoir aucune prévisualisation de site Web 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 vers Ghost. Le hic, c'est que Ghost CMS écoute les connexions sur 127.0.0.1:2368, qui n'est pas accessible par votre Nginx principal. Vous devez indiquer à Ghost d'écouter sur 0.0.0.0:2368.
Maintenant, faisons toutes ces configurations.
Connectez-vous au serveur hébergeant votre reverse proxy principal.
Tout d'abord, créez un fichier de configuration dans /etc/nginx/sites-available/
Vous pouvez le nommer comme vous le souhaitez, mais j'utilise le domaine sur lequel il écoute comme nom de fichier, comme beaucoup d'administrateurs Nginx. (par exemple,
blog.causticlabz.net)
Dans votre fichier de configuration, mettez la configuration suivante :
server {
# Remplacez toutes les occurrences de blog.causticlabz.net par votre propre domaine
listen 80;
listen [::]:80; # Si vous utilisez IPv6
server_name blog.causticlabz.net;
access_log /var/log/nginx/blog.causticlabz.net.log;
client_max_body_size 50M; # Active le téléversement de fichiers avec une limite de 50 Mo
location / {
include proxy_params; # Inclut les paramètres proxy nécessaires, les mêmes que ceux explicitement écrits par la configuration de Ghost CMS
proxy_pass http://192.168.1.2:2368$request_uri; # Remplacez par l'IP de votre serveur hébergeant Ghost CMS
}
}Notez que je configure l'écoute sur le port 80. J'utilise Let's Encrypt pour ma configuration de certificats SSL et il gère automatiquement la création de la partie HTTPS.
Comme Nginx utilise deux dossiers contenant les fichiers de configuration pour les sites disponibles et activés, nous devons également placer le fichier de configuration dans le dossier activé. Vous pourriez le copier, mais cela signifie deux fichiers à maintenir, 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 seront 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 sûr, le but de cet exercice est d'avoir la redirection activée. Choisissez donc en conséquence.
Certbot procédera ensuite au contact du serveur Let's Encrypt, à la configuration des certificats SSL et à leur ajout à votre configuration nginx.
Tout est bon pour votre reverse proxy principal.
Il est temps de configurer Ghost CMS. Connectez-vous au serveur qui l'héberge.
Changez de répertoire vers 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 fonctionnant 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 !
Besoin d’un avis concret ?
Transformons le sujet en plan d’action.
Décrivez votre contexte et recevez une réponse claire sur les options possibles.