Guide d’utilisation de Ghost avec Nginx

Cet article est libre d'accès pour tous grâce à la générosité des abonnés de Mindsers Blog qui soutiennent notre blog indépendant. Si vous appréciez le contenu que je propose, je vous invite à vous abonner dès aujourd'hui.

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 en tant que 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, mais 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.

Join 100+ developers and entrepreneurs and get notified on every new content.

No spam ever. Unsubscribe in a single click at any time.

Si vous avez des questions ou des remarques/conseils, n'hésitez pas à laisser un commentaire plus bas ! Je serais ravis de vous lire. Et si vous aimez l'article, n'oubliez pas de le partager avec vos amis.