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

introduction

Lors de l'utilisation du serveur Web Nginx,server blocks (similaire aux hôtes virtuels dans Apache) peut être utilisé pour encapsuler les détails de configuration et héberger plus d'un domaine sur un seul serveur.

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

Conditions préalables

Nous allons utiliser un utilisateur non root avec les privilègessudo 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 guideUbuntu 16.04 initial server setup.

Vous devrez également avoir installé 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 sontexample.com ettest.com.

Vous pouvez trouver un guide sur la configuration des noms de domaine avec DigitalOceanhere. Si vous ne disposez pas de deux noms de domaine disponibles, utilisez des noms fictifs pour le moment et nous vous expliquerons plus tard comment configurer votre ordinateur local pour tester votre configuration.

Première étape: configurer de nouveaux répertoires racine de document

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

Bien que cela fonctionne bien pour un seul site, nous avons besoin de répertoires supplémentaires si nous voulons 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 allons créer une structure de répertoires dans/var/www pour chacun de nos sites. Le contenu Web réel sera placé dans un répertoirehtml au sein de ces répertoires spécifiques au site. Cela nous donne une certaine flexibilité supplémentaire pour créer d'autres répertoires associés à nos sites en tant que frères du répertoirehtml si nécessaire.

Nous devons créer ces répertoires pour chacun de nos sites. L'indicateur-p dit à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éaffecter la propriété des répertoires Web à notre compte d'utilisateur normal. Cela nous permettra de leur écrire sanssudo.

Note

[.note] # En fonction de vos besoins, vous devrez peut-être ajuster à nouveau les autorisations ou la propriété des dossiers pour autoriser certains accès à l'utilisateurwww-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 sur lequel nous sommes actuellement connectés (assurez-vous que vous n'êtes pas connecté en tant queroot). Cela nous permettra de créer ou d’éditer 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 permissions de nos racines Web devraient déjà être correctes si vous n'avez pas modifié la valeur de votreumask, mais nous pouvons nous en assurer en tapant:

sudo chmod -R 755 /var/www

Notre structure de répertoire est maintenant configurée et nous pouvons continuer.

Deuxième étape: créer des exemples de pages pour chaque site

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

Créez un fichierindex.html dans votre premier domaine:

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

Dans le fichier, nous allons créer un fichier très basique indiquant le site auquel nous avons accès. Il ressemblera à ceci:

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


    
        Welcome to Example.com!
    
    
        

Success! The example.com server block is working!

Enregistrez et fermez le fichier lorsque vous avez terminé.

Comme le fichier de notre deuxième site sera fondamentalement le même, nous pouvons le copier sur 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 se réfère à notre deuxième domaine:

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


    
        Welcome to Test.com!
    
    
        

Success! The test.com server block is working!

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

Troisième étape: créer des fichiers de blocage de serveur pour chaque domaine

Maintenant que nous avons le contenu que nous souhaitons diffuser, 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 allons commencer 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éer le premier fichier bloc du 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ègessudo:

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;
        }
}

Premièrement, nous devons examiner les directives d'écoute. Only one of our server blocks on the server can have the default_server option enabled. Ceci spécifie quel bloc doit servir une demande si leserver_name demandé ne correspond à aucun des blocs de serveur disponibles. Cela ne devrait pas arriver très souvent dans des situations réelles, 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'optiondefault_server dans la directivelisten, ou vous pouvez laisser le bloc serveur par défaut activé, qui servira le contenu du/var/www/html répertoire 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 allons donc supprimer lesdefault_server de ce bloc de serveur et du suivant. Vous pouvez choisir d'ajouter l'option à votre choix parmi les blocs de serveur qui vous conviennent.

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

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

        . . .
}

Note

[.Remarque]##

Vous pouvez vérifier que l'optiondefault_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 non commentées dans plus que sur le fichier (indiqué dans la colonne la plus à gauche), Nginx se plaindra d'une configuration invalide.

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

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

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

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

}

Ensuite, nous devons modifier lesserver_name pour qu'ils correspondent aux demandes de notre premier domaine. Nous pouvons en outre ajouter tous les alias que nous voulons faire correspondre. Nous ajouterons un aliaswww.example.com pour démontrer.

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éer le deuxième fichier bloc du serveur

Maintenant que nous avons notre configuration de bloc de serveur initiale, nous pouvons l'utiliser comme base pour notre deuxième fichier. Recopiez-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ègessudo dans votre éditeur:

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

Encore une fois, assurez-vous de ne pas utiliser l’optiondefault_server pour la directivelisten dans ce fichier si vous l’avez déjà utilisée ailleurs. Ajustez la directiveroot pour qu'elle pointe vers la racine du document de votre deuxième domaine et ajustez lesserver_name pour correspondre 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.

Quatrième étape: activez vos blocs serveurs et redémarrez 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épertoiresites-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 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 directivelisten et desserver_name (vous pouvez en savoir plus sur la façon dont Nginx traite ces directiveshere):

  • example.com: répondra aux demandes deexample.com etwww.example.com

  • test.com: répondra aux demandes detest.com etwww.test.com

  • default: répondra à toutes les demandes sur le port 80 qui ne correspondent pas aux deux autres blocs.

Afin d'éviter un éventuel problème de mémoire de seau de hachage pouvant résulter de l'ajout de noms de serveur supplémentaires, nous allons continuer et ajuster 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 directiveserver_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’ya aucune erreur 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.

Cinquième étape: Modifier le fichier des hôtes locaux à des fins de test (facultatif)

Si vous n’avez pas utilisé de noms de domaine que vous possédez mais plutôt des valeurs factices, vous pouvez modifier la configuration de votre ordinateur local pour vous permettre de tester temporairement la configuration de blocage de votre serveur Nginx.

Cela ne permettra pas aux autres visiteurs de visualiser votre site correctement, mais cela vous permettra d'accéder à chaque site indépendamment et de tester votre configuration. Cela fonctionne essentiellement en interceptant des demandes qui iraient généralement 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 accède lorsque nous demandons les noms de domaine.

Note

[.note] # Assurez-vous que vous utilisez votre ordinateur local pendant ces étapes et non votre serveur VPS. Vous devrez avoir un accès root, être membre du groupe administratif ou être en mesure de modifier les fichiers système pour ce faire.
#

Si vous êtes chez vous sur un ordinateur Mac ou Linux, vous pouvez éditer le fichier nécessaire en tapant:

sudo nano /etc/hosts

Si vous êtes sous Windows, vous pouvezfind instructions for altering your hosts file ici.

Vous devez connaître l’adresse IP publique de votre serveur et les domaines que vous souhaitez router vers le serveur. En supposant que l'adresse IP publique de mon serveur est203.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 demandes deexample.com ettest.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é.

Sixième étape: testez vos résultats

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

http://example.com

Vous devriez voir une page qui ressemble à ceci:

Nginx first server block

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

http://test.com

Nginx second server block

Si ces deux sites fonctionnent, vous avez correctement configuré deux blocs de serveur indépendants avec Nginx.

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

Si vous avez besoin d'un nom de domaine sur votre serveur pour un site public, vous souhaiterez probablement acheter un nom de domaine pour chacun de vos sites. Vous pouvez apprendre commentset them up to point to your server ici.

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’existe aucune limite réelle quant au nombre de blocs serveur que vous pouvez créer, tant que votre matériel peut gérer le trafic.