Comment configurer les blocs de serveur Nginx (hôtes virtuels) sur Ubuntu 16.04

De Get Docs
Aller à :navigation, rechercher

Introduction

Lors de l'utilisation du serveur Web Nginx, les blocs de serveur (similaires aux hôtes virtuels dans Apache) peuvent être utilisés pour encapsuler les détails de configuration et héberger plusieurs domaines sur un seul serveur.

Dans ce guide, nous expliquerons comment configurer les blocs de serveur dans Nginx sur un serveur Ubuntu 16.04.

Conditions préalables

Nous allons utiliser un utilisateur non root avec les privilèges sudo tout au long de ce didacticiel. Si vous n'avez pas configuré d'utilisateur comme celui-ci, vous pouvez en créer un en suivant notre guide Configuration initiale du serveur Ubuntu 16.04.

Vous devrez également installer Nginx sur votre serveur. Les guides suivants couvrent cette procédure :

Lorsque vous avez rempli ces conditions, vous pouvez continuer avec ce guide.

Exemple de configuration

À des fins de démonstration, nous allons configurer deux domaines avec notre serveur Nginx. Les noms de domaine que nous utiliserons dans ce guide sont example.com et test.com.

Remarque : pour plus d'informations sur la configuration d'un domaine avec DigitalOcean, veuillez consulter notre Domaines et documentation produit DNS.


Si vous n'avez pas deux noms de domaine de rechange pour jouer avec, utilisez des noms d'espace réservé pour l'instant et nous vous montrerons plus tard comment configurer votre ordinateur local pour tester votre configuration.

Étape 1 - Configuration de nouveaux répertoires racine de documents

Par défaut, Nginx sur Ubuntu 16.04 a un bloc de serveur activé. Il est configuré pour servir des documents à partir d'un répertoire sur /var/www/html.

Bien que cela fonctionne bien pour un seul site, nous avons besoin de répertoires supplémentaires si nous allons desservir plusieurs sites. Nous pouvons considérer le répertoire /var/www/html comme le répertoire par défaut qui sera servi si la demande du client ne correspond à aucun de nos autres sites.

Nous créerons une structure de répertoires dans /var/www pour chacun de nos sites. Le contenu Web réel sera placé dans un répertoire html au sein de ces répertoires spécifiques au site. Cela nous donne une flexibilité supplémentaire pour créer d'autres répertoires associés à nos sites comme frères du répertoire html si nécessaire.

Nous devons créer ces répertoires pour chacun de nos sites. Le drapeau -p indique à mkdir de créer tous les répertoires parents nécessaires en cours de route :

sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.com/html

Maintenant que nous avons nos répertoires, nous allons réattribuer la propriété des répertoires Web à notre compte d'utilisateur normal. Cela nous permettra de leur écrire sans sudo.

Remarque : Selon vos besoins, vous devrez peut-être ajuster à nouveau les autorisations ou la propriété des dossiers pour autoriser certains accès à l'utilisateur www-data. Par exemple, les sites dynamiques en auront souvent besoin. Les autorisations spécifiques et les exigences de propriété dépendent entièrement de votre configuration. Suivez les recommandations pour la technologie spécifique que vous utilisez.


Nous pouvons utiliser la variable d'environnement $USER pour attribuer la propriété au compte auquel nous sommes actuellement connectés (assurez-vous que vous n'êtes pas connecté en tant que root). Cela nous permettra de créer ou de modifier facilement le contenu de ce répertoire :

sudo chown -R $USER:$USER /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/test.com/html

Les autorisations de nos racines Web devraient déjà être correctes si vous n'avez pas modifié votre valeur umask, mais nous pouvons nous en assurer en tapant :

sudo chmod -R 755 /var/www

Notre structure de répertoires est maintenant configurée et nous pouvons passer à autre chose.

Étape 2 - Créer des exemples de pages pour chaque site

Maintenant que nous avons configuré notre structure de répertoires, créons une page par défaut pour chacun de nos sites afin que nous ayons quelque chose à afficher.

Créez un fichier index.html dans votre premier domaine :

nano /var/www/example.com/html/index.html

À l'intérieur du fichier, nous allons créer un fichier vraiment basique qui indique à quel site nous accédons actuellement. Il ressemblera à ceci:

/var/www/exemple.com/html/index.html

<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success! The example.com server block is working!</h1>
    </body>
</html>

Enregistrez et fermez le fichier lorsque vous avez terminé. Pour ce faire dans nano, appuyez sur CTRL+o pour écrire le fichier, puis sur CTRL+x pour quitter.

Étant donné que le fichier de notre deuxième site sera fondamentalement le même, nous pouvons le copier dans notre deuxième racine de document comme ceci :

cp /var/www/example.com/html/index.html /var/www/test.com/html/

Maintenant, nous pouvons ouvrir le nouveau fichier dans notre éditeur :

nano /var/www/test.com/html/index.html

Modifiez-le pour qu'il fasse référence à notre deuxième domaine :

/var/www/test.com/html/index.html

<html>
    <head>
        <title>Welcome to Test.com!</title>
    </head>
    <body>
        <h1>Success!  The test.com server block is working!</h1>
    </body>
</html>

Enregistrez et fermez ce fichier lorsque vous avez terminé. Nous avons maintenant quelques pages à afficher aux visiteurs de nos deux domaines.

Étape 3 - Création de fichiers de bloc de serveur pour chaque domaine

Maintenant que nous avons le contenu que nous souhaitons servir, nous devons créer les blocs de serveur qui indiqueront à Nginx comment procéder.

Par défaut, Nginx contient un bloc serveur appelé default que nous pouvons utiliser comme modèle pour nos propres configurations. Nous commencerons par concevoir le bloc serveur de notre premier domaine, que nous copierons ensuite pour notre deuxième domaine et apporterons les modifications nécessaires.

Création du premier fichier de bloc de serveur

Comme mentionné ci-dessus, nous allons créer notre premier fichier de configuration de bloc de serveur en copiant le fichier par défaut :

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

Maintenant, ouvrez le nouveau fichier que vous avez créé dans votre éditeur de texte avec les privilèges sudo :

sudo nano /etc/nginx/sites-available/example.com

En ignorant les lignes commentées, le fichier ressemblera à ceci :

/etc/nginx/sites-available/example.com

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}

Tout d'abord, nous devons examiner les directives d'écoute. Un seul de nos blocs de serveur sur le serveur peut avoir l'option default_server activée. Ceci spécifie quel bloc doit servir une requête si le server_name demandé ne correspond à aucun des blocs de serveur disponibles. Cela ne devrait pas se produire très fréquemment dans des scénarios réels, car les visiteurs accéderont à votre site via votre nom de domaine.

Vous pouvez choisir de désigner l'un de vos sites comme "par défaut" en incluant l'option default_server dans la directive listen, ou vous pouvez laisser le bloc de serveur par défaut activé, qui servira le contenu de le répertoire /var/www/html si l'hôte demandé est introuvable.

Dans ce guide, nous laisserons le bloc de serveur par défaut en place pour traiter les demandes non correspondantes, nous supprimerons donc le default_server de ce bloc de serveur et du suivant. Vous pouvez choisir d'ajouter l'option à celui de vos blocs de serveur qui vous convient.

/etc/nginx/sites-available/example.com

server {
        listen 80;
        listen [::]:80;

        . . .
}

Remarque : Vous pouvez vérifier que l'option default_server n'est activée que dans un seul fichier actif en tapant :

grep -R default_server /etc/nginx/sites-enabled/

Si des correspondances sont trouvées sans commentaire dans plus d'un fichier (indiqué dans la colonne la plus à gauche), Nginx se plaindra d'une configuration non valide.


La prochaine chose que nous allons devoir ajuster est la racine du document, spécifiée par la directive root. Pointez-le vers la racine du document du site que vous avez créé :

/etc/nginx/sites-available/example.com

server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;

}

Ensuite, nous devons modifier le server_name pour correspondre aux demandes de notre premier domaine. Nous pouvons également ajouter tous les alias que nous voulons faire correspondre. Nous allons ajouter un alias www.example.com pour illustrer.

Lorsque vous avez terminé, votre fichier ressemblera à ceci :

/etc/nginx/sites-available/example.com

server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

C'est tout ce dont nous avons besoin pour une configuration de base. Enregistrez et fermez le fichier pour quitter.

Création du deuxième fichier de bloc de serveur

Maintenant que nous avons notre configuration initiale de bloc de serveur, nous pouvons l'utiliser comme base pour notre deuxième fichier. Copiez-le pour créer un nouveau fichier :

sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com

Ouvrez le nouveau fichier avec les privilèges sudo dans votre éditeur :

sudo nano /etc/nginx/sites-available/test.com

Encore une fois, assurez-vous de ne pas utiliser l'option default_server pour la directive listen dans ce fichier si vous l'avez déjà utilisée ailleurs. Ajustez la directive root pour qu'elle pointe vers la racine du document de votre deuxième domaine et ajustez server_name pour qu'elle corresponde au nom de domaine de votre deuxième site (assurez-vous d'inclure tous les alias).

Lorsque vous aurez terminé, votre fichier ressemblera probablement à ceci :

/etc/nginx/sites-available/test.com

server {
        listen 80;
        listen [::]:80;

        root /var/www/test.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name test.com www.test.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

Lorsque vous avez terminé, enregistrez et fermez le fichier.

Étape 4 - Activer vos blocs de serveur et redémarrer Nginx

Maintenant que nous avons nos fichiers de blocage de serveur, nous devons les activer. Nous pouvons le faire en créant des liens symboliques à partir de ces fichiers vers le répertoire sites-enabled, que Nginx lit au démarrage.

Nous pouvons créer ces liens en tapant :

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

Ces fichiers sont maintenant liés dans le répertoire activé. Nous avons maintenant trois blocs de serveur activés, qui sont configurés pour répondre en fonction de leur directive listen et de la directive server_name (vous pouvez en savoir plus sur la façon dont Nginx traite ces directives ici) :

  • example.com : répondra aux demandes de example.com et www.example.com
  • test.com : répondra aux demandes de test.com et www.test.com
  • default : répondra à toutes les requêtes sur le port 80 qui ne correspondent pas aux deux autres blocs.

Afin d'éviter un éventuel problème de mémoire de compartiment de hachage pouvant survenir lors de l'ajout de noms de serveur supplémentaires, nous ajusterons également une valeur unique dans notre fichier /etc/nginx/nginx.conf. Ouvrez le fichier maintenant :

sudo nano /etc/nginx/nginx.conf

Dans le fichier, recherchez la directive server_names_hash_bucket_size. Supprimez le symbole # pour décommenter la ligne :

/etc/nginx/nginx.conf

http {
    . . .

    server_names_hash_bucket_size 64;

    . . .
}

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ensuite, testez pour vous assurer qu'il n'y a pas d'erreurs de syntaxe dans l'un de vos fichiers Nginx :

sudo nginx -t

Si aucun problème n'a été détecté, redémarrez Nginx pour activer vos modifications :

sudo systemctl restart nginx

Nginx devrait maintenant servir vos deux noms de domaine.

Étape 5 - Modification de votre fichier d'hôtes locaux pour les tests (facultatif)

Si vous n'avez pas utilisé de noms de domaine que vous possédez et que vous avez plutôt utilisé des valeurs d'espace réservé, vous pouvez modifier la configuration de votre ordinateur local pour vous permettre de tester temporairement la configuration du bloc de votre serveur Nginx.

Cela ne permettra pas aux autres visiteurs de visualiser correctement votre site, mais cela vous donnera la possibilité d'accéder à chaque site indépendamment et de tester votre configuration. Cela fonctionne en interceptant les requêtes qui iraient habituellement au DNS pour résoudre les noms de domaine. Au lieu de cela, nous pouvons définir les adresses IP auxquelles nous voulons que notre ordinateur local aille lorsque nous demandons les noms de domaine.

Remarque : Assurez-vous que vous travaillez sur votre ordinateur local pendant ces étapes et non sur un serveur distant. Vous devrez avoir un accès root, être membre du groupe d'administration ou être en mesure de modifier les fichiers système pour ce faire.


Si vous êtes sur un ordinateur Mac ou Linux à la maison, vous pouvez modifier le fichier nécessaire en tapant :

sudo nano /etc/hosts

Si vous êtes sous Windows, vous pouvez trouver des instructions pour modifier votre fichier hosts ici.

Vous devez connaître l'adresse IP publique de votre serveur et les domaines que vous souhaitez acheminer vers le serveur. En supposant que l'adresse IP publique de mon serveur est 203.0.113.5, les lignes que j'ajouterais à mon fichier ressembleraient à ceci :

/etc/hosts

127.0.0.1   localhost
. . .

203.0.113.5 example.com www.example.com
203.0.113.5 test.com www.test.com

Cela interceptera toutes les requêtes pour example.com et test.com et les enverra à votre serveur, ce que nous voulons si nous ne possédons pas réellement les domaines que nous utilisons.

Enregistrez et fermez le fichier lorsque vous avez terminé.

Étape 6 - Tester vos résultats

Maintenant que vous êtes tous configurés, vous devez tester que vos blocs de serveur fonctionnent correctement. Vous pouvez le faire en visitant les domaines dans votre navigateur Web :

http://example.com

Vous devriez voir une page qui ressemble à ceci :

Si vous visitez votre deuxième nom de domaine, vous devriez voir un site légèrement différent :

http://test.com

Si ces deux sites fonctionnent, vous avez configuré avec succès deux blocs de serveurs indépendants avec Nginx.

À ce stade, si vous avez ajusté votre fichier hosts sur votre ordinateur local afin de tester, vous souhaiterez probablement supprimer les lignes que vous avez ajoutées.

Si vous avez besoin d'un accès de nom de domaine à votre serveur pour un site public, vous voudrez probablement acheter un nom de domaine pour chacun de vos sites.

Conclusion

Vous devriez maintenant avoir la possibilité de créer des blocs de serveur pour chaque domaine que vous souhaitez héberger à partir du même serveur. Il n'y a pas de limites réelles au nombre de blocs de serveurs que vous pouvez créer, tant que votre matériel peut gérer le trafic.