Comment configurer Nginx pour plusieurs domaines sur la même adresse IP ?

Publié 17 octobre 2024

Problème : héberger plusieurs domaines sur une seule adresse IP

Héberger plusieurs sites web avec différents noms de domaine sur une seule adresse IP de serveur peut être compliqué. Nginx, un serveur web populaire, offre une solution à ce problème, mais nécessite une configuration appropriée pour gérer plusieurs domaines.

Solution : configuration correcte de Nginx pour plusieurs domaines

Mise en place des blocs serveur

Les blocs serveur dans Nginx permettent d'héberger plusieurs domaines sur un seul serveur. Ils vous permettent de définir différentes configurations pour chaque domaine, y compris les racines de documents et la journalisation.

Pour créer des blocs serveur pour chaque domaine, définissez-les dans votre fichier de configuration Nginx. Chaque bloc serveur commence par la directive server et contient les paramètres pour ce domaine.

Conseil: Organisez votre configuration

Gardez votre configuration Nginx propre en créant des fichiers séparés pour chaque domaine dans le répertoire /etc/nginx/sites-available/. Ensuite, créez des liens symboliques vers ces fichiers dans le répertoire /etc/nginx/sites-enabled/ pour les activer.

Configuration de la directive Listen

La directive 'listen' dans Nginx indique au serveur quelle adresse IP et quel port utiliser pour les connexions entrantes. Lors de la configuration de plusieurs domaines, utilisez correctement la directive 'listen'.

La bonne façon d'utiliser la directive 'listen' est de spécifier uniquement le numéro de port, généralement 80 pour HTTP ou 443 pour HTTPS. Par exemple :

listen 80;

N'incluez pas le domaine dans la directive 'listen'. C'est incorrect et peut causer des problèmes.

Utilisation de la directive Server_Name

La directive 'server_name' est importante pour le routage des domaines dans Nginx. Elle indique à Nginx quels noms de domaine associer à un bloc serveur.

Pour configurer 'server_name' pour chaque domaine, incluez-le dans le bloc serveur. Par exemple :

server_name www.domain1.example domain1.example;

Vous pouvez ajouter plusieurs noms de domaine, avec et sans le préfixe 'www', pour couvrir toutes les versions de votre nom de domaine.

Exemple: Sous-domaines avec caractère générique

Si vous voulez correspondre à tous les sous-domaines d'un domaine, vous pouvez utiliser un caractère générique dans la directive server_name :

server_name *.domain1.example;

Cela correspondra à n'importe quel sous-domaine de domain1.example.

Guide étape par étape pour configurer Nginx pour plusieurs domaines

Modification du fichier de configuration Nginx

Pour configurer plusieurs domaines dans Nginx, localisez et ouvrez le fichier de configuration principal de Nginx. Sur la plupart des systèmes, ce fichier se trouve à /etc/nginx/nginx.conf. Il est préférable de créer des fichiers de configuration séparés pour chaque domaine dans le répertoire /etc/nginx/sites-available/.

Pour créer des blocs serveur séparés pour chaque domaine :

  1. Ouvrez un nouveau fichier dans le répertoire sites-available :

    sudo nano /etc/nginx/sites-available/domain1.conf
  2. Ajoutez un bloc serveur pour votre premier domaine :

    server {
       listen 80;
       server_name domain1.com www.domain1.com;
       # Autres directives...
    }
  3. Répétez ce processus pour votre deuxième domaine dans un nouveau fichier :

    sudo nano /etc/nginx/sites-available/domain2.conf
  4. Ajoutez le bloc serveur pour le deuxième domaine :

    server {
       listen 80;
       server_name domain2.com www.domain2.com;
       # Autres directives...
    }

Conseil: Créer des liens symboliques pour les fichiers de configuration

Après avoir créé les fichiers de configuration dans le répertoire sites-available, créez des liens symboliques pour les activer :

sudo ln -s /etc/nginx/sites-available/domain1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/domain2.conf /etc/nginx/sites-enabled/

Cette méthode vous permet d'activer ou de désactiver facilement des sites en créant ou en supprimant des liens symboliques.

Configuration des répertoires racine

Des répertoires racine séparés pour chaque domaine permettent de garder les fichiers des différents sites web séparés, facilitant ainsi la gestion et la sécurité.

Pour spécifier les répertoires racine dans la configuration :

  1. Créez des répertoires pour chaque domaine :

    sudo mkdir -p /var/www/domain1.com
    sudo mkdir -p /var/www/domain2.com
  2. Dans le bloc serveur de chaque domaine, ajoutez la directive root :

    server {
       listen 80;
       server_name domain1.com www.domain1.com;
       root /var/www/domain1.com;
       # Autres directives...
    }

Configuration du traitement PHP (si applicable)

Si vos sites web utilisent PHP, configurez FastCGI pour le traitement PHP :

  1. Dans chaque bloc serveur, ajoutez un bloc location pour PHP :

    server {
       # Autres directives...
       location ~ \.php$ {
           fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
           fastcgi_index index.php;
           include fastcgi_params;
       }
    }
  2. Assurez-vous que les paramètres FastCGI sont corrects pour chaque domaine. Les directives fastcgi_param doivent pointer vers la racine du document correcte :

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Après avoir effectué ces modifications, testez votre configuration Nginx et redémarrez le service Nginx pour appliquer les changements.