Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code : Skills Commencer
Sections
Administration Linux

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 nginx

Vérifiez l’installation et assurez-vous que le service est en cours d’exécution :

sudo systemctl status nginx

Vous 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 nginx

Noms 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/html

L’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/html

Cela 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/www

L’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.html

Pour example2.com

echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.html

Ces 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.com

Ajoutez 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.com

Ajoutez 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

DirectiveObjectif
listen 80Écoute les connexions HTTP entrantes sur le port 80
listen [::]:80Active la prise en charge d’IPv6 sur le port 80
server_nameDéfinit les noms de domaine gérés par ce bloc
rootDéfinit la racine du document — où les fichiers du site Web sont stockés
indexSpécifie le fichier par défaut à servir lorsqu’un répertoire est demandé
try_filesTente de servir le fichier demandé ; retourne 404 s’il n’est pas trouvé
access_log / error_logFichiers 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/default

Vous 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 -t

Un test réussi retourne :

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

Si 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 nginx

Vous 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.com
  • http://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/hosts

Ajoutez 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.com

Enregistrez 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-nginx

Obtenir 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.com
sudo certbot --nginx -d example2.com -d www.example2.com

Suivez les invites interactives. Certbot va :

  1. Vérifier la propriété du domaine via un défi HTTP
  2. Obtenir un certificat signé de Let's Encrypt
  3. Mettre à jour automatiquement votre bloc serveur Nginx pour écouter sur le port 443
  4. 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-run

Si 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.com

404 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_name est unique et correcte
  • Les symlinks dans sites-enabled sont 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.log

Considé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-enabled basé 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.