Intermédiaire ⏱ 14 min Mis à jour le 29 juillet 2026

Installer Nginx sur un VPS et servir un site ou une application

Nginx est le serveur web le plus utilisé pour exposer un site ou une application sur un VPS. Voici comment l'installer, servir un site et faire du reverse proxy proprement.

Nginx : serveur web et reverse proxy

Installer Nginx VPS permet de publier un site statique ou de rendre une application accessible depuis Internet. Nginx peut répondre directement aux visiteurs ou transmettre leurs requêtes à un autre programme exécuté localement sur le serveur.

Ses deux usages principaux sont les suivants :

UsageFonction de Nginx
Site statiqueEnvoie directement les fichiers HTML, CSS, JavaScript et images
ApplicationTransmet les requêtes à Node.js, Python ou un autre service
Plusieurs domainesSélectionne un bloc server selon le nom demandé
HTTPSReçoit les connexions chiffrées avec un certificat TLS

Dans une architecture avec une application Node.js, celle-ci peut écouter uniquement sur :

127.0.0.1:3000

Nginx devient alors le point d’entrée public sur les ports :

80  → HTTP
443 → HTTPS

Cette organisation évite d’exposer directement le port interne de l’application. Elle permet également de centraliser les domaines, les certificats HTTPS, les journaux d’accès et certaines règles de sécurité.

Visiteur

Nginx sur le port 80 ou 443

Application sur 127.0.0.1:3000

Un reverse proxy ne remplace pas la sécurisation de l’application. Le programme situé derrière Nginx doit rester à jour et valider les données reçues.

Installer Nginx sur le VPS

Connectez-vous au serveur avec un utilisateur disposant de sudo. Le guide pour se connecter à un VPS en SSH détaille cette première étape.

Sur Debian ou Ubuntu, mettez à jour l’index des paquets :

sudo apt update

Installez Nginx :

sudo apt install -y nginx

Vérifiez ensuite le service :

sudo systemctl status nginx

Le résultat attendu contient :

Active: active (running)

Vous pouvez aussi vérifier que Nginx démarre automatiquement avec le système :

sudo systemctl is-enabled nginx

Si nécessaire :

sudo systemctl enable --now nginx

Ouvrez l’adresse IP du VPS dans un navigateur :

http://ADRESSE_IP

La page d’accueil par défaut de Nginx doit apparaître.

Autoriser HTTP et HTTPS dans UFW

Si UFW est actif, autorisez les deux ports web :

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Vous pouvez aussi utiliser le profil Nginx lorsqu’il est disponible :

sudo ufw app list
sudo ufw app info "Nginx Full"
sudo ufw allow "Nginx Full"

Vérifiez les règles :

sudo ufw status

N’ouvrez pas le port interne de l’application, comme 3000, si Nginx est le seul service qui doit y accéder.

Pour configurer correctement le filtrage réseau, consultez le guide du pare-feu UFW sur un VPS.

Servir un site statique avec Nginx

Créez un répertoire réservé au site :

sudo mkdir -p /var/www/mon-site

Attribuez-le à votre utilisateur pour faciliter les déploiements :

sudo chown -R "$USER":"$USER" /var/www/mon-site

Créez une page de test :

nano /var/www/mon-site/index.html

Ajoutez un contenu simple :

<!doctype html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Mon site</title>
</head>
<body>
  <h1>Nginx fonctionne correctement</h1>
</body>
</html>

Créez ensuite un bloc serveur :

sudo nano /etc/nginx/sites-available/mon-site

Configuration minimale :

server {
    listen 80;
    listen [::]:80;

    server_name exemple.fr www.exemple.fr;

    root /var/www/mon-site;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Remplacez les domaines par les vôtres. Pour un premier test uniquement par adresse IP, vous pouvez utiliser :

server_name _;

Activez le site avec un lien symbolique :

sudo ln -s /etc/nginx/sites-available/mon-site \
  /etc/nginx/sites-enabled/mon-site

Validez toujours la configuration :

sudo nginx -t

Si le test réussit, rechargez Nginx :

sudo systemctl reload nginx

Votre site doit maintenant être accessible depuis le domaine, à condition que ses enregistrements DNS pointent vers l’adresse IP du VPS.

La commande reload applique une configuration valide sans interrompre inutilement le service. Testez toujours avec nginx -t avant de l’utiliser.

Configurer un reverse proxy vers une application

Supposons que votre application Node.js écoute localement sur :

127.0.0.1:3000

Vérifiez son fonctionnement depuis le VPS :

curl http://127.0.0.1:3000

L’application doit répondre avant la configuration de Nginx. Si curl échoue, corrigez d’abord le service Node.js.

Créez un bloc serveur :

sudo nano /etc/nginx/sites-available/mon-app

Ajoutez :

server {
    listen 80;
    listen [::]:80;

    server_name app.exemple.fr;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Les en-têtes transmettent à l’application des informations utiles sur la requête initiale :

En-têteUtilité
HostDomaine demandé par le visiteur
X-Real-IPAdresse IP vue par Nginx
X-Forwarded-ForChaîne des proxys et adresse du client
X-Forwarded-ProtoProtocole initial, HTTP ou HTTPS

Activez le bloc :

sudo ln -s /etc/nginx/sites-available/mon-app \
  /etc/nginx/sites-enabled/mon-app

Testez et rechargez :

sudo nginx -t
sudo systemctl reload nginx

Le trafic reçu sur app.exemple.fr est désormais transmis à l’application locale.

L’application Node.js doit idéalement écouter sur 127.0.0.1 plutôt que sur toutes les interfaces :

app.listen(3000, "127.0.0.1", () => {
  console.log("Application disponible sur le port 3000");
});

Ainsi, le port 3000 n’est pas directement accessible depuis Internet.

Gérer plusieurs sites avec les virtual hosts

Nginx utilise des blocs server, parfois appelés virtual hosts, pour héberger plusieurs domaines sur la même adresse IP.

La structure courante sous Debian et Ubuntu est :

/etc/nginx/
├── nginx.conf
├── sites-available/
│   ├── site-a
│   ├── site-b
│   └── application
└── sites-enabled/
    ├── site-a -> ../sites-available/site-a
    ├── site-b -> ../sites-available/site-b
    └── application -> ../sites-available/application

Créez un fichier distinct par site :

/etc/nginx/sites-available/exemple.fr
/etc/nginx/sites-available/boutique.exemple.fr
/etc/nginx/sites-available/api.exemple.fr

Chaque fichier définit son propre server_name :

server {
    listen 80;
    server_name exemple.fr www.exemple.fr;

    root /var/www/exemple.fr;
}

Pour désactiver un site sans supprimer sa configuration, retirez uniquement le lien symbolique :

sudo rm /etc/nginx/sites-enabled/exemple.fr

Puis validez et rechargez :

sudo nginx -t
sudo systemctl reload nginx

Vous pouvez désactiver le site par défaut si vous ne l’utilisez pas :

sudo rm /etc/nginx/sites-enabled/default

Ne supprimez pas un fichier sans vérifier qu’il ne sert plus à aucun domaine.

Tester et recharger Nginx sans couper le service

Avant toute application d’une nouvelle configuration, exécutez :

sudo nginx -t

Cette commande vérifie la syntaxe et tente d’ouvrir les fichiers référencés.

Un test réussi ressemble à ceci :

nginx: configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Vous pouvez alors recharger Nginx :

sudo systemctl reload nginx

La séquence la plus sûre est :

sudo nginx -t && sudo systemctl reload nginx

Grâce à &&, le rechargement n’est exécuté que si le test réussit.

En cas d’erreur, Nginx indique généralement le fichier et la ligne concernés :

nginx: [emerg] unexpected "}" in /etc/nginx/sites-enabled/mon-site:14

Corrigez cette première erreur, puis relancez le test.

Consultez les journaux avec :

sudo journalctl -u nginx -n 100 --no-pager

Les logs Nginx se trouvent généralement dans :

/var/log/nginx/access.log
/var/log/nginx/error.log

Pour suivre les erreurs en direct :

sudo tail -f /var/log/nginx/error.log

Évitez un restart à l’aveugle : une configuration invalide peut empêcher le service de revenir correctement.

Ajouter HTTPS avec Let’s Encrypt

Une fois le domaine correctement dirigé vers le VPS et le site accessible en HTTP, vous pouvez installer un certificat TLS avec Let’s Encrypt et Certbot.

Le certificat permet de passer de :

http://exemple.fr

à :

https://exemple.fr

Avant cette étape, vérifiez que :

  • le domaine pointe vers la bonne adresse IP ;
  • le port 80 est accessible ;
  • le bloc server_name contient le bon domaine ;
  • sudo nginx -t réussit ;
  • le site répond déjà en HTTP.

Certbot peut obtenir un certificat et adapter une configuration Nginx existante. Suivez une procédure correspondant exactement à votre distribution et à sa méthode d’installation actuelle.

Le HTTPS est indispensable avant de transmettre des identifiants, formulaires ou données sensibles. Pour un site WordPress, consultez également le guide pour héberger un site WordPress.

Des sauvegardes automatiques sont incluses pour vous aider à restaurer. Conservez aussi vos propres exports réguliers : vous restez responsable de vos données.

En résumé

  • Installer Nginx VPS permet de servir un site statique ou de publier une application avec un reverse proxy.
  • Installez le paquet avec sudo apt install -y nginx.
  • Vérifiez le service avec sudo systemctl status nginx.
  • Autorisez les ports 80/tcp et 443/tcp dans UFW.
  • Placez les fichiers statiques dans un répertoire dédié sous /var/www/.
  • Créez un bloc server dans /etc/nginx/sites-available/.
  • Activez-le avec un lien symbolique dans /etc/nginx/sites-enabled/.
  • Utilisez proxy_pass http://127.0.0.1:3000 pour une application locale.
  • N’ouvrez pas publiquement le port interne de l’application sans nécessité.
  • Créez un fichier de configuration distinct pour chaque domaine.
  • Exécutez toujours sudo nginx -t avant de recharger Nginx.
  • Utilisez sudo systemctl reload nginx plutôt qu’un redémarrage à l’aveugle.
  • Ajoutez ensuite un certificat Let’s Encrypt pour servir le domaine en HTTPS.
  • Pour installer Nginx VPS sur une infrastructure hébergée en France avec stockage NVMe, Anti-DDoS L3/L4/L7 inclus, panel de gestion et support francophone, découvrez les offres VPS TalCloud.