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

De Get Docs
Aller à :navigation, rechercher

Introduction

Lors de l'utilisation du serveur Web Nginx, server blocks (similaire aux hôtes virtuels d'Apache) peut être utilisé 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 14.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 les étapes 1 à 4 de notre guide de configuration initiale du serveur Ubuntu 14.04.

Vous devrez également installer Nginx sur votre serveur. Si vous voulez une pile LEMP complète (Linux, Nginx, MySQL et PHP) sur votre serveur, vous pouvez suivre notre guide sur configuration d'une pile LEMP dans Ubuntu 14.04. Si vous n'avez besoin que de Nginx, vous pouvez l'installer en tapant :

sudo apt-get update
sudo apt-get install nginx

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

À 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.

Vous pouvez trouver un guide sur comment configurer des noms de domaine avec DigitalOcean ici. Si vous n'avez pas deux noms de domaine de rechange pour jouer avec, utilisez des noms factices pour l'instant et nous vous montrerons plus tard comment configurer votre ordinateur local pour tester votre configuration.

Première étape - Configurer de nouveaux répertoires racine de documents

Par défaut, Nginx sur Ubuntu 14.04 a un bloc de serveur activé par défaut. Il est configuré pour servir des documents à partir d'un répertoire à :

/usr/share/nginx/html

Nous n'utiliserons pas la valeur par défaut car il est plus facile de travailler avec les éléments du répertoire /var/www. Le paquet Nginx d'Ubuntu n'utilise pas /var/www comme racine de document par défaut en raison d'une politique Debian concernant les paquets utilisant /var/www.

Puisque nous sommes des utilisateurs et non des mainteneurs de paquets, nous pouvons dire à Nginx que c'est là que nous voulons que nos racines de documents soient. Plus précisément, nous voulons un répertoire pour chacun de nos sites dans le répertoire /var/www et nous aurons un répertoire sous ceux-ci appelé html pour contenir nos fichiers réels.

Tout d'abord, nous devons créer les répertoires nécessaires. Nous pouvons le faire avec la commande suivante. 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 vos répertoires sont créés, nous devons en transférer la propriété à notre utilisateur habituel. Nous pouvons utiliser la variable d'environnement $USER pour remplacer le compte d'utilisateur auquel nous sommes actuellement connectés. Cela nous permettra de créer des fichiers dans ce répertoire sans permettre à nos visiteurs de créer du contenu.

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.

Deuxième étape - 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:

<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é.

É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 et le modifier pour qu'il fasse référence à notre deuxième domaine :

nano /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é. Vous avez maintenant quelques pages à afficher aux visiteurs de nos deux domaines.

Troisième étape - Créer des fichiers de bloc de serveur pour chaque domaine

Maintenant que nous avons le contenu que nous souhaitons servir, nous devons réellement 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éer le 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 root :

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

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

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

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

Tout d'abord, nous devons examiner les directives d'écoute. Un seul de nos blocs de serveur peut avoir la spécification default_server. Cela spécifie quel bloc doit servir une demande si le server_name demandé ne correspond à aucun des blocs de serveur disponibles.

Nous allons éventuellement désactiver la configuration du bloc de serveur par défaut, afin que nous puissions placer l'option default_server dans ce bloc de serveur ou dans celui de notre autre site. Je vais laisser l'option default_server activée dans ce bloc de serveur, mais vous pouvez choisir celle qui convient le mieux à votre situation.

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éé :

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

Remarque : Chaque instruction Nginx doit se terminer par un point-virgule (;). Vérifiez donc chacune de vos lignes si vous rencontrez des problèmes.

Ensuite, nous voulons 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 démontrer :

server_name example.com www.example.com;

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

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

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

    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 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 root dans votre éditeur :

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

Dans ce nouveau fichier, nous allons devoir revoir les directives listen. Si vous avez laissé l'option default_server activée dans le dernier fichier, vous devrez la supprimer dans ce fichier. De plus, vous devrez vous débarrasser de l'option ipv6only=on, car elle ne peut être spécifiée qu'une seule fois par combinaison adresse/port :

listen 80;
listen [::]:80;

Ajustez la directive racine du document pour qu'elle pointe vers la racine du document de votre deuxième domaine :

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

Ajustez le server_name pour qu'il corresponde à votre deuxième domaine et à tout alias :

server_name test.com www.test.com;

Votre fichier devrait ressembler à ceci avec ces modifications :

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

    root /var/www/test.com/html;
    index index.html index.htm;

    server_name test.com www.test.com;

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

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

Étape 4 - Activez vos blocs de serveur et redémarrez Nginx

Vous avez maintenant créé vos blocs 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 se trouvent maintenant dans le répertoire enabled. Cependant, le fichier de bloc de serveur par défaut que nous avons utilisé comme modèle est également activé actuellement et entrera en conflit avec notre fichier qui a le jeu de paramètres default_server.

Nous pouvons désactiver le fichier de blocage du serveur par défaut en supprimant simplement le lien symbolique. Il sera toujours disponible pour référence dans le répertoire sites-available, mais il ne sera pas lu par Nginx au démarrage :

sudo rm /etc/nginx/sites-enabled/default

Nous devons également ajuster très rapidement un paramètre dans le fichier de configuration Nginx par défaut. Ouvrez-le en tapant :

sudo nano /etc/nginx/nginx.conf

Nous avons juste besoin de décommenter une ligne. Recherchez et supprimez le commentaire de ceci :

server_names_hash_bucket_size 64;

Nous sommes maintenant prêts à redémarrer Nginx pour activer vos modifications. Vous pouvez le faire en tapant :

sudo service nginx restart

Nginx devrait maintenant servir vos deux noms de domaine.

Cinquième étape - Configurer le fichier d'hôtes locaux (facultatif)

Si vous n'avez pas utilisé de noms de domaine que vous possédez et que vous avez plutôt utilisé des valeurs fictives, 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 essentiellement en interceptant les requêtes 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 aille lorsque nous demandons les noms de domaine.

Assurez-vous que vous travaillez sur votre ordinateur local pendant ces étapes et non sur votre serveur VPS. 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 avez besoin de l'adresse IP publique de votre serveur et des domaines que vous souhaitez acheminer vers le serveur. En supposant que l'adresse IP publique de mon serveur est 111.111.111.111, les lignes que j'ajouterais à mon fichier ressembleraient à ceci :

127.0.0.1   localhost
127.0.0.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 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é.

Sixième étape - Testez 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. Vous pouvez apprendre comment les configurer pour pointer vers votre serveur 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'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.