Comment configurer les hôtes virtuels dans Nginx sur Ubuntu
Configurer les hôtes virtuels dans Nginx est l’une des techniques les plus puissantes pour héberger plusieurs sites Web sur un seul serveur, chacun avec son propre nom de domaine, répertoire racine et configuration indépendante. Nginx gère cela via des blocs serveur — des unités de configuration flexibles et légères qui définissent comment le serveur Web répond aux demandes pour chaque domaine.
Que vous gériez un portfolio personnel, exécutiez des sites clients ou fassiez évoluer une application multi-locataires, ce guide fournit une procédure complète et prête pour la production pour configurer les hôtes virtuels Nginx sur Ubuntu. Nous couvrirons la structure des répertoires, la configuration des blocs serveur, l’activation des sites, la configuration SSL/HTTPS et le dépannage — tout ce dont vous avez besoin pour passer de zéro à un serveur Nginx multi-sites entièrement fonctionnel.
> Vous cherchez un serveur Ubuntu fiable pour suivre ? Les plans VPS Hosting d’AlexHost vous donnent un accès root complet, un stockage SSD et un déploiement instantané — parfait pour ce cas d’usage exact.
Prérequis
Avant de commencer, assurez-vous que les conditions suivantes sont remplies :
Nginx installé sur votre serveur
Si Nginx n’est pas encore installé, exécutez les commandes suivantes sur votre serveur Ubuntu :
sudo apt update
sudo apt install nginxVérifiez l’installation et assurez-vous que le service est en cours d’exécution :
sudo systemctl status nginxVous devriez voir active (running) dans la sortie. Si ce n’est pas le cas, démarrez-le manuellement :
sudo systemctl start nginx
sudo systemctl enable nginxNoms de domaine pointant vers votre serveur
Chaque hôte virtuel nécessite un nom de domaine qui se résout en l’adresse IP publique de votre serveur. Vous devrez créer des enregistrements A dans vos paramètres DNS pointant vers l’IP du serveur.
> Besoin d’un domaine ? Enregistrez le vôtre via Enregistrement de domaine AlexHost et gérez les enregistrements DNS directement depuis votre panneau de contrôle.
À des fins de test local, vous pouvez contourner entièrement le DNS en modifiant votre fichier /etc/hosts (couvert à l’étape 7).
Autorisations requises
Vous aurez besoin de privilèges sudo sur votre serveur Ubuntu pour créer des répertoires, modifier les fichiers de configuration et gérer le service Nginx.
Étape 1 : Configurer les répertoires pour chaque site Web
Chaque site Web hébergé sur votre serveur doit avoir son propre répertoire isolé pour stocker les fichiers Web. Cette séparation maintient vos projets organisés et prévient les conflits de configuration.
Dans ce guide, nous allons configurer deux domaines d’exemple : example1.com et example2.com. Remplacez-les par vos noms de domaine réels tout au long du guide.
Créer les répertoires racine Web
sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/htmlL’indicateur -p crée tous les répertoires intermédiaires selon les besoins.
Attribuer la propriété correcte
Accordez la propriété de ces répertoires à www-data, l’utilisateur système sous lequel Nginx s’exécute :
sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/htmlCela garantit que Nginx dispose des autorisations de lecture nécessaires pour servir les fichiers à partir de ces répertoires.
Définir les autorisations du répertoire
sudo chmod -R 755 /var/wwwL’autorisation 755 signifie que le propriétaire a un accès complet en lecture/écriture/exécution, tandis que les groupes et les autres utilisateurs ont un accès en lecture et exécution — approprié pour le contenu Web servi publiquement.
Étape 2 : Créer un contenu HTML d’exemple
Pour vérifier que chaque hôte virtuel fonctionne correctement, créez un simple index.html fichier pour chaque site.
Pour example1.com
echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.htmlPour example2.com
echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.htmlCes pages d’espace réservé confirmeront que Nginx achemine les demandes vers la racine de document correcte pour chaque domaine.
Étape 3 : Créer les fichiers de configuration du Virtual Host
Nginx stocke les fichiers de configuration du site dans /etc/nginx/sites-available/. Chaque fichier définit un bloc serveur — l’équivalent Nginx d’un virtual host Apache. Les sites activés sont ensuite liés symboliquement dans /etc/nginx/sites-enabled/.
Configuration pour example1.com
Créez un nouveau fichier de configuration :
sudo nano /etc/nginx/sites-available/example1.comAjoutez le bloc serveur suivant :
server {
listen 80;
listen [::]:80;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html index.htm;
access_log /var/log/nginx/example1.com.access.log;
error_log /var/log/nginx/example1.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Enregistrez et fermez le fichier (Ctrl+X, puis Y, puis Enter).
Configuration pour example2.com
Créez un deuxième fichier de configuration :
sudo nano /etc/nginx/sites-available/example2.comAjoutez le bloc serveur suivant :
server {
listen 80;
listen [::]:80;
server_name example2.com www.example2.com;
root /var/www/example2.com/html;
index index.html index.htm;
access_log /var/log/nginx/example2.com.access.log;
error_log /var/log/nginx/example2.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Directives clés expliquées
| Directive | Objectif |
|---|---|
listen 80 | Écoute les connexions HTTP entrantes sur le port 80 |
listen [::]:80 | Active la prise en charge d’IPv6 sur le port 80 |
server_name | Définit les noms de domaine gérés par ce bloc |
root | Définit la racine du document — où les fichiers du site Web sont stockés |
index | Spécifie le fichier par défaut à servir lorsqu’un répertoire est demandé |
try_files | Tente de servir le fichier demandé ; retourne 404 s’il n’est pas trouvé |
access_log / error_log | Fichiers journaux séparés par site pour un débogage plus facile |
Étape 4 : Activer les hôtes virtuels
Nginx active les sites en créant des liens symboliques de sites-available vers sites-enabled. Cette conception vous permet de préparer des configurations sans les activer immédiatement.
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/Supprimer le site par défaut (Facultatif mais recommandé)
Si vous souhaitez empêcher la page d’espace réservé par défaut de Nginx d’interférer, désactivez-la :
sudo rm /etc/nginx/sites-enabled/defaultVous pouvez toujours le réactiver ultérieurement en recréant le lien symbolique.
Étape 5 : Tester la configuration Nginx
Avant de redémarrer Nginx, validez toujours vos fichiers de configuration pour les erreurs de syntaxe. Un fichier mal configuré peut arrêter tous les sites sur le serveur.
sudo nginx -tUn test réussi retourne :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulSi vous voyez des erreurs, Nginx indiquera le fichier et le numéro de ligne où le problème s’est produit. Examinez le fichier de configuration pertinent et corrigez les fautes de frappe ou les points-virgules manquants avant de continuer.
Étape 6 : Redémarrer Nginx pour appliquer les modifications
Une fois que le test de configuration réussit, rechargez ou redémarrez Nginx pour appliquer vos modifications :
sudo systemctl restart nginxVous pouvez également utiliser reload pour un redémarrage gracieux qui n’interrompt pas les connexions actives :
sudo systemctl reload nginxÉtape 7 : Accédez à vos sites Web
Si DNS est déjà configuré
Si vos noms de domaine pointent déjà vers l’adresse IP de votre serveur via des enregistrements DNS A, ouvrez simplement un navigateur et accédez à :
http://example1.comhttp://example2.com
Vous devriez voir les messages « Bienvenue » respectifs que vous avez créés à l’étape 2.
Pour les tests locaux (sans DNS)
Si vous testez localement ou si DNS n’a pas encore été propagé, vous pouvez simuler la résolution de domaine en modifiant le fichier /etc/hosts de votre machine locale (sur Linux/macOS) ou C:WindowsSystem32driversetchosts (sur Windows).
Ouvrez le fichier avec des privilèges élevés :
sudo nano /etc/hostsAjoutez les lignes suivantes, en remplaçant YOUR_SERVER_IP par l’adresse IP réelle de votre serveur :
YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.comEnregistrez le fichier et testez dans votre navigateur. N’oubliez pas de supprimer ces entrées une fois que vos enregistrements DNS réels seront actifs.
Étape 8 : Activer HTTPS avec Let's Encrypt (Recommandé)
L’exécution de sites web en HTTP simple n’est plus acceptable pour les environnements de production. HTTPS chiffre le trafic entre votre serveur et vos visiteurs, améliore les classements SEO et est requis pour les fonctionnalités modernes des navigateurs. Let's Encrypt fournit des certificats SSL/TLS gratuits et automatiquement renouvelables.
> Préférez une solution SSL premium ? AlexHost propose des Certificats SSL de confiance pour les entreprises qui ont besoin d’une validation étendue ou d’une couverture wildcard.
Installer Certbot
sudo apt install certbot python3-certbot-nginxObtenir et installer les certificats SSL
Exécutez Certbot pour chaque domaine. Le plugin --nginx modifie automatiquement votre configuration Nginx pour activer HTTPS :
sudo certbot --nginx -d example1.com -d www.example1.comsudo certbot --nginx -d example2.com -d www.example2.comSuivez les invites interactives. Certbot va :
- Vérifier la propriété du domaine via un défi HTTP
- Obtenir un certificat signé de Let's Encrypt
- Mettre à jour automatiquement votre bloc serveur Nginx pour écouter sur le port 443
- Configurer la redirection HTTP vers HTTPS
Vérifier le renouvellement automatique
Les certificats Let's Encrypt expirent tous les 90 jours. Certbot installe un minuteur systemd pour gérer les renouvellements automatiquement. Testez-le avec :
sudo certbot renew --dry-runSi l’exécution d’essai se termine sans erreurs, vos certificats se renouvelleront automatiquement sans aucune intervention manuelle.
À quoi ressemblera votre bloc serveur mis à jour
Après l’exécution de Certbot, votre configuration sera automatiquement mise à jour pour ressembler à quelque chose comme ceci :
server {
listen 443 ssl;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html;
ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example1.com www.example1.com;
return 301 https://$host$request_uri;
}Dépannage des problèmes courants
Même avec une configuration soignée, des problèmes peuvent survenir. Voici les problèmes les plus courants et comment les résoudre :
502 Bad Gateway
Cela signifie généralement que Nginx ne peut pas communiquer avec un service backend (par exemple, PHP-FPM ou une application Node.js). Vérifiez que le service upstream est en cours d’exécution et que le socket/port dans votre configuration est correct.
403 Forbidden
Généralement un problème de permissions. Vérifiez que www-data possède la racine web et que les permissions des fichiers sont définies correctement :
sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com404 Not Found
Vérifiez que la directive root dans votre bloc serveur pointe vers le bon répertoire et que index.html existe à ce chemin.
Mauvais site chargé
Si la visite de example1.com charge le contenu de example2.com, vérifiez que :
- Chaque directive
server_nameest unique et correcte - Les symlinks dans
sites-enabledsont valides :ls -la /etc/nginx/sites-enabled/ - Le site par défaut est désactivé s’il entre en conflit
Nginx ne démarre pas après un changement de configuration
Exécutez toujours sudo nginx -t avant de redémarrer. Examinez attentivement la sortie d’erreur — elle pointera vers le fichier exact et la ligne causant le problème.
Vérification des journaux
Les journaux par site (configurés à l’étape 3) sont votre meilleure ressource de débogage :
sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.logConsidérations avancées
Hébergement d’applications PHP
Si vos sites exécutent PHP (par exemple, WordPress, Laravel), vous devrez installer PHP-FPM et ajouter une directive fastcgi_pass à votre bloc serveur :
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}Utilisation d’un panneau de contrôle
La gestion manuelle des hôtes virtuels Nginx via la ligne de commande est puissante mais chronophage à grande échelle. Si vous préférez une interface graphique, considérez le VPS avec cPanel d’AlexHost ou explorez la gamme complète des Panneaux de contrôle VPS pour trouver celui qui convient à votre flux de travail.
Mise à l’échelle au-delà d’un seul VPS
À mesure que votre trafic augmente, un seul VPS peut ne pas être suffisant. Pour les charges de travail à fort trafic et à forte consommation de ressources, envisagez une mise à niveau vers des Serveurs dédiés pour des ressources garanties, une isolation matérielle complète et des performances maximales.
Conclusion
Vous avez maintenant configuré avec succès les hôtes virtuels Nginx sur Ubuntu, ce qui permet à votre serveur d’héberger plusieurs sites Web indépendants simultanément. Voici un résumé de ce qui a été réalisé :
- Création de répertoires racine Web isolés pour chaque domaine avec propriété et permissions correctes
- Rédaction de configurations de bloc serveur propres et prêtes pour la production avec journaux d’accès et d’erreur séparés
- Activation des hôtes virtuels en utilisant le modèle
sites-available/sites-enabledbasé sur les liens symboliques de Nginx - Validation et rechargement de la configuration Nginx en toute sécurité
- Sécurisation de chaque site avec HTTPS en utilisant des certificats Let’s Encrypt gratuits via Certbot
Cette configuration est efficace, évolutive et suit les meilleures pratiques de Nginx. Que vous hébergiez deux sites ou vingt, le même modèle s’applique — répétez simplement le processus pour chaque domaine supplémentaire.
Pour de meilleurs résultats, associez cette configuration à un environnement d’hébergement rapide et fiable. Les plans VPS Hosting d’AlexHost sont optimisés pour les charges de travail Linux, incluent un accès root complet et sont soutenus par un support technique 24/7 — vous donnant la base idéale pour exécuter Nginx en production.
sur tous les services d'hébergement