Comment Configurer des Blocks de Serveur Nginx (Hôtes Virtuels) sur Ubuntu 14.04 LTS
Vous n'utilisez pas Ubuntu 14.04 ?Choisissez une autre version ou distribution.
Introduction
Lors de l'utilisation du serveur web Nginx, les blocs serveur (similaires aux hôtes virtuels dans Apache) peuvent être utilisés pour encapsuler les détails de configuration et héberger plus d'un domaine sur un seul serveur.
Dans ce guide, nous discuterons de la façon de configurer des blocs de serveur dans Nginx sur un serveur Ubuntu 14.04.
Prérequis
Nous allons utiliser un utilisateur non-root avec des privilèges sudo tout au long de ce tutoriel. Si vous n’avez pas un utilisateur de ce type configuré, 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 avoir Nginx installé sur votre serveur. Si vous souhaitez avoir toute une pile LEMP (Linux, Nginx, MySQL et PHP) sur votre serveur, vous pouvez suivre notre guide sur la configuration d'une pile LEMP sur Ubuntu 14.04. Si vous avez seulement besoin de Nginx, vous pouvez l'installer en tapant :
sudo apt-get update
sudo apt-get install nginx
Lorsque vous aurez rempli ces exigences, vous pourrez 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 la façon de configurer des noms de domaine avec Linux-Console.net ici. Si vous n'avez pas deux noms de domaine libres à utiliser, utilisez pour l'instant des noms fictifs et nous vous montrerons plus tard comment configurer votre ordinateur local pour tester votre configuration.
Étape Un — Configurer de nouveaux répertoires racine de document
Par défaut, Nginx sur Ubuntu 14.04 a un bloc serveur activé par défaut. Il est configuré pour servir des documents à partir d'un répertoire situé à :
/usr/share/nginx/htmlNous n’utiliserons pas le paramètre par défaut car il est plus facile de travailler avec les éléments dans le répertoire /var/www. Le paquet Nginx d’Ubuntu n’utilise pas /var/www comme racine de documents par défaut en raison d’une politique de Debian concernant les paquets utilisant /var/www.
Puisque nous sommes des utilisateurs et non des mainteneurs de paquets, nous pouvons indiquer à Nginx que c'est ici que nous voulons que nos racines de documents se trouvent. 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. L'option -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/htmlMaintenant que vous avez créé vos répertoires, nous devons transférer la propriété à notre utilisateur régulier. Nous pouvons utiliser la variable d'environnement $USER pour substituer le compte utilisateur sur lequel 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/htmlLes 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/wwwNotre structure de répertoires est maintenant configurée et nous pouvons passer à autre chose.
Étape deux — Créer des pages d'exemple 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 très basique qui indique quel site nous consultons 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é.
Puisque le fichier pour notre deuxième site sera essentiellement 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 afin qu'il se réfère à 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.
Étape trois — Créez 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 diront à Nginx comment le faire.
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 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 des privilèges root :
sudo nano /etc/nginx/sites-available/example.comEn 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 listen. Un seul de nos blocs serveur peut avoir la spécification default_server. Cela spécifie quel bloc doit servir une requête si le server_name demandé ne correspond à aucun des blocs serveur disponibles.
Nous allons finalement désactiver la configuration du bloc serveur par défaut, afin que nous puissions placer l'option default_server soit dans ce bloc serveur, soit dans celui de notre autre site. Je vais laisser l'option default_server activée dans ce bloc serveur, mais vous pouvez choisir ce qui est le mieux pour votre situation.
La prochaine chose que nous allons devoir ajuster est la racine du document, spécifiée par la directive root. Pointez-la vers la racine du document du site que vous avez créée :
root /var/www/example.com/html;Remarque : Chaque instruction Nginx doit se terminer par un point-virgule (;), alors vérifiez chacune de vos lignes si vous rencontrez des problèmes.
Ensuite, nous voulons modifier le server_name pour correspondre aux requêtes pour notre premier domaine. Nous pouvons également ajouter tous les alias que nous voulons faire correspondre. Nous ajouterons un alias www.example.com pour démontrer :
server_name example.com www.example.com;Lorsque vous aurez terminé, votre fichier ressemblera à quelque chose comme 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 de bloc de serveur initiale, nous pouvons l'utiliser comme base pour notre deuxième fichier. Copiez-la pour créer un nouveau fichier :
sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.comOuvrez le nouveau fichier avec les privilèges root dans votre éditeur :
sudo nano /etc/nginx/sites-available/test.comDans ce nouveau fichier, nous allons devoir examiner à nouveau les directives listen. Si vous avez laissé l'option default_server activée dans le fichier précédent, 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 de la racine du document pour qu'elle pointe vers la racine du document de votre second domaine :
root /var/www/test.com/html;Ajustez le server_name pour qu'il corresponde à votre deuxième domaine et à tous les 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 quatre — Activez vos blocs de serveur et redémarrez Nginx
Vous avez maintenant créé vos blocs de serveur, nous devons les activer.
Nous pouvons faire cela en créant des liens symboliques de ces fichiers vers le répertoire sites-enabled, que Nginx lit lors du 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é. Cependant, le fichier de bloc 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 paramètre default_server défini.
Nous pouvons désactiver le fichier du bloc serveur par défaut simplement en supprimant le lien symbolique. Il sera toujours disponible comme 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/defaultNous devons également ajuster un paramètre très rapidement dans le fichier de configuration Nginx par défaut. Ouvrez-le en tapant :
sudo nano /etc/nginx/nginx.confNous avons juste besoin de décommenter une ligne. Trouvez et supprimez le commentaire de ceci :
server_names_hash_bucket_size 64;Maintenant, nous sommes prêts à redémarrer Nginx pour activer vos modifications. Vous pouvez le faire en tapant :
sudo service nginx restartNginx devrait maintenant servir vos deux noms de domaine.
Étape Cinq — Configurer le fichier des hôtes local (Optionnel)
Si vous n'avez pas utilisé de noms de domaine que vous possédez et que vous avez utilisé à la place des valeurs factices, vous pouvez modifier la configuration de votre ordinateur local pour vous permettre de tester temporairement la configuration de votre bloc de serveur Nginx.
Cela n'autorisera pas les autres visiteurs à voir votre site correctement, 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 normalement au DNS pour résoudre les noms de domaine. À la place, nous pouvons définir les adresses IP vers lesquelles nous voulons que notre ordinateur local se connecte lorsque nous demandons les noms de domaine.
Assurez-vous d’exécuter ces étapes sur votre ordinateur local et non sur votre serveur VPS. Vous devrez avoir un accès root, être membre du groupe administratif, ou être en mesure d’éditer les fichiers système pour pouvoir le faire.
Si vous êtes sur un ordinateur Mac ou Linux à la maison, vous pouvez modifier le fichier nécessaire en tapant :
sudo nano /etc/hostsSi vous êtes sur 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 diriger vers le serveur. En supposant que l'adresse IP publique de mon serveur soit 111.111.111.111, les lignes que j'ajouterais à mon fichier ressembleraient à quelque chose comme ceci :
127.0.0.1 localhost
127.0.0.1 guest-desktop
111.111.111.111 example.com
111.111.111.111 test.comCela interceptera toutes les requêtes pour example.com et test.com et les enverra à votre serveur, ce qui est 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 six — Testez vos résultats
Maintenant que tout est configuré, vous devriez tester si vos blocs de serveur fonctionnent correctement. Vous pouvez le faire en visitant les domaines dans votre navigateur web :
http://example.comVous 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.comSi ces deux sites fonctionnent, vous avez configuré avec succès deux blocs de serveur indépendants avec Nginx.
À ce stade, si vous avez modifié votre fichier hosts sur votre ordinateur local pour effectuer un test, vous voudrez probablement supprimer les lignes que vous avez ajoutées.
Si vous avez besoin d'un accès à un nom de domaine pour 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 qu'ils pointent vers votre serveur ici.
Conclusion
Vous devriez maintenant avoir la capacité 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 véritables limites au nombre de blocs de serveur que vous pouvez créer, tant que votre matériel peut gérer le trafic.


