Base de connaissances

Machines virtuelles Avancé 20 min

Configurer un reverse proxy sur une VM

Exposer plusieurs services proprement avec noms de domaine, HTTPS et ports internes.

Objectif pratique

Exposer plusieurs applications depuis une VM en gardant des URLs propres et des ports internes protégés.

Distribution utilisée

Debian / Ubuntu

Sommaire

  1. Cartographier domaines et ports
  2. Configurer une application à la fois
  3. Fermer les ports internes
  4. Valider HTTPS et headers
  5. Prévoir la maintenance

Guide détaillé

Étape 1

Cartographier domaines et ports

Chaque application doit avoir un nom, un port interne et un comportement HTTPS attendu.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Lister les ports et tester le réseau

On vérifie ce qui écoute réellement et on teste localement avant de chercher une erreur côté DNS ou routeur.

Debian / Ubuntu
ip -br addr
ip route
sudo ss -tulpn
curl -I http://127.0.0.1
nc -vz 127.0.0.1 80
Ce que font les commandes
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `ss -tulpn` liste les ports ouverts et les processus qui écoutent.
  • `curl` teste une URL depuis la machine elle-même.
  • `nc -vz` teste si un port TCP répond sans envoyer de données applicatives.

Installer et tester un serveur web

Sur Debian ou Ubuntu, Nginx est un choix simple pour exposer une page, un reverse proxy ou une application HTTP.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx --no-pager
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `curl` teste une URL depuis la machine elle-même.

Commandes adaptées Debian / Ubuntu

Sur Debian ou Ubuntu, apt installe Nginx depuis les dépôts officiels et systemd active le service.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `curl` teste une URL depuis la machine elle-même.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `curl -I http://127.0.0.1` doit répondre avec un code HTTP attendu.
  • Le certificat HTTPS doit se renouveler automatiquement si vous exposez le service publiquement.

Étape 2

Configurer une application à la fois

Une règle proxy validée vaut mieux qu’un fichier complet impossible à relire en cas d’erreur.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Appliquer cette étape avec une trace simple

Pour cette machine virtuelle, on écrit ce que l’on va faire, on exécute les vérifications, puis on garde une note datée.

Debian / Ubuntu
mkdir -p ~/newscloud-notes
printf '%s\n' "Configurer une application à la fois" > ~/newscloud-notes/etape.txt
systemctl --failed
journalctl -p warning -n 50 --no-pager
cat ~/newscloud-notes/etape.txt
Ce que font les commandes
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `printf` écrit une note ou un fichier de contrôle avec un format prévisible.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.
  • `cat ~/newscloud-notes/etape.txt` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.

Installer et tester un serveur web

Sur Debian ou Ubuntu, Nginx est un choix simple pour exposer une page, un reverse proxy ou une application HTTP.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx --no-pager
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `curl` teste une URL depuis la machine elle-même.

Commandes adaptées Debian / Ubuntu

Sur Debian ou Ubuntu, apt installe Nginx depuis les dépôts officiels et systemd active le service.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `curl` teste une URL depuis la machine elle-même.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `curl -I http://127.0.0.1` doit répondre avec un code HTTP attendu.
  • Le certificat HTTPS doit se renouveler automatiquement si vous exposez le service publiquement.

Étape 3

Fermer les ports internes

Quand le proxy fait son travail, les ports applicatifs ne devraient pas être exposés directement à Internet.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Lister les ports et tester le réseau

On vérifie ce qui écoute réellement et on teste localement avant de chercher une erreur côté DNS ou routeur.

Debian / Ubuntu
ip -br addr
ip route
sudo ss -tulpn
curl -I http://127.0.0.1
nc -vz 127.0.0.1 80
Ce que font les commandes
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `ss -tulpn` liste les ports ouverts et les processus qui écoutent.
  • `curl` teste une URL depuis la machine elle-même.
  • `nc -vz` teste si un port TCP répond sans envoyer de données applicatives.

Installer et tester un serveur web

Sur Debian ou Ubuntu, Nginx est un choix simple pour exposer une page, un reverse proxy ou une application HTTP.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx --no-pager
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `curl` teste une URL depuis la machine elle-même.

Commandes adaptées Debian / Ubuntu

Sur Debian ou Ubuntu, apt installe Nginx depuis les dépôts officiels et systemd active le service.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `curl` teste une URL depuis la machine elle-même.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `curl -I http://127.0.0.1` doit répondre avec un code HTTP attendu.
  • Le certificat HTTPS doit se renouveler automatiquement si vous exposez le service publiquement.

Étape 4

Valider HTTPS et headers

Certificat, redirection, hôte transmis et IP client doivent être contrôlés, surtout pour les applications connectées.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Installer une page web de contrôle

Cette page simple permet de distinguer un problème Nginx d’un problème DNS, proxy ou pare-feu.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
printf '<h1>OK Newscloud</h1>\n' | sudo tee /var/www/html/index.html
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `printf` écrit une note ou un fichier de contrôle avec un format prévisible.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `curl` teste une URL depuis la machine elle-même.

Installer et tester un serveur web

Sur Debian ou Ubuntu, Nginx est un choix simple pour exposer une page, un reverse proxy ou une application HTTP.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx --no-pager
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `curl` teste une URL depuis la machine elle-même.

Commandes adaptées Debian / Ubuntu

Sur Debian ou Ubuntu, apt installe Nginx depuis les dépôts officiels et systemd active le service.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `curl` teste une URL depuis la machine elle-même.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `curl -I http://127.0.0.1` doit répondre avec un code HTTP attendu.
  • Le certificat HTTPS doit se renouveler automatiquement si vous exposez le service publiquement.

Étape 5

Prévoir la maintenance

Documentez où ajouter un nouveau site, où lire les logs proxy et comment revenir en arrière.

Observer la machine avant de changer quoi que ce soit

Ces commandes affichent la distribution, le nom de la machine, les interfaces réseau, les routes, la mémoire et l’espace disque. Elles ne modifient rien.

Debian / Ubuntu
cat /etc/os-release
hostnamectl
ip -br addr
ip route
free -h
df -h
Ce que font les commandes
  • `cat /etc/os-release` affiche la distribution et sa version exacte.
  • `hostnamectl` affiche le nom, le type de machine et quelques informations système.
  • `ip -br addr` liste les interfaces et adresses IP sous une forme courte.
  • `ip route` montre la passerelle utilisée et les routes connues.
  • `free -h` affiche RAM et swap dans une unité lisible.
  • `df -h` indique l’espace disque libre par point de montage.

Appliquer cette étape avec une trace simple

Pour cette machine virtuelle, on écrit ce que l’on va faire, on exécute les vérifications, puis on garde une note datée.

Debian / Ubuntu
mkdir -p ~/newscloud-notes
printf '%s\n' "Prévoir la maintenance" > ~/newscloud-notes/etape.txt
systemctl --failed
journalctl -p warning -n 50 --no-pager
cat ~/newscloud-notes/etape.txt
Ce que font les commandes
  • `mkdir -p` crée le dossier demandé sans erreur s’il existe déjà.
  • `printf` écrit une note ou un fichier de contrôle avec un format prévisible.
  • `systemctl --failed` liste les services en échec pour repérer un problème global.
  • `journalctl` lit les journaux systemd ; l’option `--no-pager` évite un affichage interactif.
  • `cat ~/newscloud-notes/etape.txt` exécute l’action indiquée ; lisez la sortie avant de passer à la commande suivante.

Installer et tester un serveur web

Sur Debian ou Ubuntu, Nginx est un choix simple pour exposer une page, un reverse proxy ou une application HTTP.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx --no-pager
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `systemctl status` confirme l’état du service et affiche les dernières lignes utiles.
  • `curl` teste une URL depuis la machine elle-même.

Commandes adaptées Debian / Ubuntu

Sur Debian ou Ubuntu, apt installe Nginx depuis les dépôts officiels et systemd active le service.

Debian / Ubuntu
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
curl -I http://127.0.0.1
Ce que font les commandes
  • `apt update` recharge la liste des paquets Debian/Ubuntu disponibles.
  • `apt install` installe les paquets indiqués depuis les dépôts configurés.
  • `systemctl enable --now` démarre le service immédiatement et l’active au prochain démarrage.
  • `curl` teste une URL depuis la machine elle-même.

Variantes et attention

  • Les commandes de ce guide sont adaptées pour Debian / Ubuntu. Si votre image est une autre famille Linux, gardez la logique mais remplacez le gestionnaire de paquets et les noms de services.
  • En VM, vous contrôlez le système complet. Vous pouvez agir sur le noyau, le pare-feu et les volumes, mais vous êtes aussi responsable des mises à jour et de l’exposition réseau.
  • Niveau avancé : adaptez les chemins, noms de services et ports à votre application. Ne copiez pas les commandes sans remplacer les valeurs exemples.

Vérifications

  • La commande `systemctl --failed` ne doit pas afficher de service critique en échec.
  • La commande `df -h` doit montrer assez d’espace libre sur `/`, `/var` et les volumes applicatifs.
  • `curl -I http://127.0.0.1` doit répondre avec un code HTTP attendu.
  • Le certificat HTTPS doit se renouveler automatiquement si vous exposez le service publiquement.

Checklist finale

  • Services listés
  • HTTPS actif
  • Ports internes fermés