Comment configurer les blocs de serveur Nginx (hôtes virtuels) sur Ubuntu 14.04 LTS
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.