Déploiement
Déploiement • Chapitre 11 : Configuration du serveur et mise en production

Association d'un domaine à une application

Un même serveur physique peut héberger des dizaines de sites et d'APIs différentes. Apprenez à router le trafic avec la directive server_name de Nginx, à organiser l'arborescence sites-available et à recharger Nginx sans déconnecter un seul visiteur.

🏷️
server_name Virtuel

Nginx examine l'en-tête Host HTTP pour déterminer quel bloc de configuration exécuter.

📂
sites-available

Dossier de stockage contenant les fichiers de configuration de tous vos projets.

🔗
sites-enabled Symlink

Dossier d'activation contenant des liens symboliques pointant vers les sites actifs.

⚡
Reload Zero-Downtime

systemctl reload applique les nouveaux domaines sans couper les connexions TCP ouvertes.

nginx-enable-site.sh
# 1. Créer le fichier de configuration dans sites-available
$ sudo nano /etc/nginx/sites-available/learnweb.conf

# 2. Activer le site en créant un lien symbolique vers sites-enabled
$ sudo ln -s /etc/nginx/sites-available/learnweb.conf /etc/nginx/sites-enabled/

# 3. Vérifier rigoureusement qu'aucune faute de frappe n'existe
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# 4. Recharger Nginx à chaud (PAS de restart !)
$ sudo systemctl reload nginx

# 5. Tester la réponse HTTP avec curl en inspectant les headers
$ curl -I http://api.learnweb.com
HTTP/1.1 200 OK
Server: nginx/1.24.0
Content-Type: application/json; charset=utf-8

Guide Approfondi & Architecture Système

1. La Différence Cruciale entre restart et reload

Une des erreurs les plus fréquentes en production :
  • sudo systemctl restart nginx (À ÉVITER) : Tue immédiatement tous les processus Nginx en cours, ferme brutalement les téléchargements et requêtes en cours de vos clients, puis redémarre.
  • sudo systemctl reload nginx (BONNE PRATIQUE) : Nginx démarre de nouveaux processus ouvriers avec la nouvelle configuration, et laisse les anciens processus terminer proprement leurs requêtes en cours avant de s'éteindre. Zéro coupure pour les visiteurs !

2. Gérer Plusieurs Domaines sur la Même Adresse IP

Grâce à l'en-tête HTTP Host et au protocole SNI (Server Name Indication) en HTTPS :

Lorsque Nginx reçoit une requête sur l'IP 198.51.100.42:80, il lit le champ Host: blog.monsite.com. Si un bloc possède server_name blog.monsite.com;, il lui transmet la requête ; sinon, il l'envoie vers le bloc par défaut (default_server).

Tableau de Procédure : Cycle de Vie d'une Configuration Nginx

ÉtapeCommande SystèmeConséquence en Cas d'Erreur
1. Rédactionnano /etc/nginx/sites-available/site.confAucun impact (fichier passif)
2. Activationln -s ... /etc/nginx/sites-enabled/Prêt pour la prise en compte
3. Contrôle de syntaxenginx -tAffiche la ligne et le fichier précis de l'erreur sans toucher au serveur en ligne
4. Applicationsystemctl reload nginxSi le test nginx -t a validé, transition 100% transparente sans déconnexion