Guide d’utilisation de Ghost avec Nginx
Comme vous le savez déjà ce site a été migré de WordPress vers Ghost.
Ghost est un CMS écrit en Node.js et qui se concentre un maximum sur ce qui fait le blog : le contenu.
Il est donc beaucoup plus léger et réactif qu'un CMS traditionnel tel que WordPress. Voici comment je l'ai mis en place sur mon serveur.
Installation de Ghost
L'installation de Ghost est très simple. Je ne vais pas vous réécrire la documentation ici. Elle est très bien faite et vous permettra rapidement d'avoir un site Ghost fonctionnel.
Comme dit à la fin de la documentation, il ne vous reste plus qu'à aller sur http://<your-ip-address>:2368/ghost
pour accéder à l'admin.
Lors de votre première connexion, vous devrez créer votre compte.
Nginx en reverse proxy
Vous vous demandez peut-être pourquoi Ghost écoute par défaut sur le port 2368 de votre serveur et non sur le port 80 comme tous les autres nginx, apache et concerts…
Lorsque vous développez en Node.js vous partez presque de zéro. Même si le langage ne l'est pas, la plateforme et les library standard de Node.js sont très bas niveaux.
Vous développez presque tout seul votre serveur HTTP. Beaucoup d'aspects du traitement des requêtes, dont une bonne partie de la sécurité, sont laissés à votre charge. Les applications Node.js possèdent donc potentiellement des failles de sécurité.
Autre fait, les programmes écoutant les ports entre 0 et 1024 doivent être lancés avec un utilisateur "sudoer" (root
par exemple).
En combinant les deux informations, vous vous imaginez facilement qu'une application mal codée devant être lancée en sudoer pour écouter sur le port 80 représente une très grosse faille de sécurité pour tout votre serveur.
Une solution consiste à utiliser Apache ou Nginx dans le rôle de reverse proxy. Dans cet article, ce sera Nginx.
Nous allons donc demander à Nginx d'écouter sur le port 80 et de rediriger le flux HTTP vers l'application Node.js qui écoute sur un port supérieur à 1024 pour qu'elle la traite.
L'application Node.js (ici Ghost) n'a pas besoin d'être exécuté avec un utilisateur sudoer. Cela n'enlève pas les failles de sécurité de l'application. En revanche, si jamais une faille est exploitée elle ne donnera pas aussi facilement un accès privilégié à la machine hôte.
Comment on fait ça ?
Voici en substance le script de configuration qui permet de faire fonctionner Ghost avec Nginx :
server {
listen 80;
server_name <domain>;
location / {
max_ranges 0;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:2368;
}
access_log /var/log/nginx/<domain>.log;
client_max_body_size 3m;
}
Nginx écoute sur le port 80 ; pour toutes les routes du domaine <domaine>
il redirige vers le port 2368. Là où écoute Ghost.