Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
tutoriel:reseau:http:serveur:nginx:vhosts:start [2024/09/21 10:29] – supprimée - modification externe (Unknown date) 127.0.0.1 | tutoriel:reseau:http:serveur:nginx:vhosts:start [2024/09/21 10:43] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ====== Nginx : Comment configurer des hôtes virtuels sur Ubuntu 16.04 ====== | ||
+ | |||
+ | Les blocs **server** (similaires aux hôtes virtuels dans Apache) peuvent encapsuler les détails de la configuration et héberger plusieurs domaines sur un seul serveur. | ||
+ | |||
+ | Les serveurs virtuels contrôlent le traitement des demandes pour des domaines ou des adresses IP particuliers. | ||
+ | |||
+ | Chaque serveur virtuel définit des emplacements (<< | ||
+ | |||
+ | Chaque **location** peut transmettre la demande par proxy ou renvoyer un fichier. | ||
+ | |||
+ | L'URI peut être modifié, en redirigeant la demande vers un autre emplacement ou un serveur virtuel. | ||
+ | |||
+ | Un code d' | ||
+ | |||
+ | Dans chacun des contextes de gestion du trafic, vous incluez un ou plusieurs blocs **server** pour définir les serveurs virtuels qui contrôlent le traitement des demandes. | ||
+ | |||
+ | Les directives que vous pouvez inclure dans un contexte **server** varient en fonction du type de flux : | ||
+ | * Pour le flux HTTP (contexte **http**), chaque directive **server** contrôle le traitement des demandes de ressources sur des domaines ou des adresses IP particuliers. | ||
+ | * Dans un contexte **server**, un ou plusieurs contextes **location** définissent comment traiter des groupes spécifiques d'URI. | ||
+ | * Pour le flux mail et TCP/UDP (contextes **mail** et **stream**) les directives **server** contrôlent chacune le traitement du trafic arrivant sur un port TCP ou un socket UNIX particulier. | ||
+ | |||
+ | Vous pouvez partir du fichier exemple fourni :<cli prompt=' | ||
+ | |||
+ | On peut ajouter plusieurs directives **server** pour définir plusieurs serveurs virtuels. | ||
+ | |||
+ | La directive **listen** spécifie l' | ||
+ | |||
+ | Les adresses IPv4 et IPv6 sont acceptées. Placez les adresses IPv6 entre crochets. | ||
+ | |||
+ | Voici un exemple de configuration d'un serveur qui écoute l' | ||
+ | server { | ||
+ | listen 127.0.0.1: | ||
+ | # Le reste de la configuration du serveur | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | * Si le port est omis, c'est le port standard qui est utilisé. | ||
+ | * Si l' | ||
+ | * Sans directive listen, le port standard est 80/tcp et le port par défaut est 8000/tcp, selon les privilèges du super-utilisateur. | ||
+ | * Si plusieurs serveurs correspondent à l' | ||
+ | |||
+ | Voici un exemple avec un nom exact :<code - > | ||
+ | server { | ||
+ | listen | ||
+ | server_name example.org www.example.org; | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Si plusieurs noms correspondent, | ||
+ | - Nom exact | ||
+ | - Le joker le plus long commençant par un astérisque, | ||
+ | - Le joker le plus long se terminant par un astérisque, | ||
+ | - Première expression régulière correspondante (par ordre d' | ||
+ | |||
+ | Si aucun nom ne correspond, Nginx prend le au serveur par défaut pour le port sur lequel la requête est arrivée. | ||
+ | </ | ||
+ | |||
+ | Le serveur par défaut est le premier répertorié dans le fichier **nginx.conf**, | ||
+ | server { | ||
+ | listen | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | * **un utilisateur avec les privilèges sudo** tout au long de ce tutoriel. | ||
+ | * **Nginx** installé sur votre serveur. Voir en particulier : | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Exemple de configuration | ||
+ | |||
+ | Dans ce document, nous allons configurer deux domaines avec notre serveur Nginx. Nous les appellerons **example.com** et **test.com**. | ||
+ | </ | ||
+ | |||
+ | ===== Première étape : Configurer de nouveaux répertoires racine de document ===== | ||
+ | |||
+ | Par défaut, Nginx a un bloc **server** activé par défaut, configuré pour servir des documents à partir du répertoire **/ | ||
+ | |||
+ | Bien que cela fonctionne bien pour un seul site, pour desservir plusieurs sites, il faut des répertoires supplémentaires. | ||
+ | |||
+ | Le répertoire / | ||
+ | |||
+ | Nous allons créer une structure de répertoires dans /var/www pour chacun de nos sites. | ||
+ | |||
+ | Le contenu Web sera placé dans un répertoire spécifique. | ||
+ | |||
+ | Cela nous donne plus de flexibilité pour créer d' | ||
+ | |||
+ | Nous devons créer ces répertoires pour chacun de nos sites (L' | ||
+ | USER@MACHINE: | ||
+ | |||
+ | Maintenant que nous avons nos répertoires, | ||
+ | Selon vos besoins, vous devrez peut-être ajuster les autorisations pour autoriser l' | ||
+ | </ | ||
+ | |||
+ | Nous utilisons la variable d' | ||
+ | USER@MACHINE: | ||
+ | |||
+ | 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 saisissant :<cli prompt=' | ||
+ | |||
+ | Notre structure de répertoire est maintenant configurée et nous pouvons continuer. | ||
+ | ===== Autres étapes ===== | ||
+ | |||
+ | ==== Créer des pages exemples pour chaque site ==== | ||
+ | |||
+ | Maintenant que notre structure de répertoires est en place, créons une page par défaut pour chacun de nos sites pour avoir quelque chose à afficher. | ||
+ | |||
+ | Créez avec les droits d' | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Comme le fichier de notre deuxième site est semblable, copiez-le sur notre deuxième racine de document comme ceci :<cli prompt=' | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Nous avons maintenant quelques pages à afficher aux visiteurs de nos deux domaines. | ||
+ | |||
+ | ==== Créer des blocs server pour chaque domaine ==== | ||
+ | |||
+ | Maintenant que nous avons le contenu à diffuser, nous devons créer les blocs **server** qui indiqueront à Nginx comment procéder. | ||
+ | |||
+ | Par défaut, Nginx contient un bloc **server** nommé default que nous pouvons utiliser comme modèle pour nos propres configurations. | ||
+ | |||
+ | Nous allons commencer par le bloc **server** de notre premier domaine, que nous copierons ensuite pour notre deuxième domaine et modifierons. | ||
+ | |||
+ | === Créer le premier fichier bloc server === | ||
+ | |||
+ | Comme mentionné ci-dessus, nous allons créer notre premier fichier de configuration de bloc server en copiant le fichier default :<cli prompt=' | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | server { | ||
+ | listen 80 default_server; | ||
+ | listen [::]:80 default_server; | ||
+ | |||
+ | root / | ||
+ | index index.html index.htm index.nginx-debian.html; | ||
+ | |||
+ | server_name _; | ||
+ | |||
+ | location / { | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Examinons d' | ||
+ | |||
+ | Sur le serveur, l' | ||
+ | |||
+ | Ceci spécifie quel bloc doit servir une demande si le nom de serveur demandé ne correspond à aucun des blocs server disponibles. | ||
+ | |||
+ | Cela ne devrait pas arriver très souvent dans des scénarios réels, car les visiteurs accéderont à votre site par votre nom de domaine. | ||
+ | |||
+ | Vous pouvez choisir de désigner l'un de vos sites comme **default** en incluant l' | ||
+ | |||
+ | Dans ce guide, nous allons laisser le bloc server par défaut en place pour traiter les demandes qui ne correspondant pas. | ||
+ | |||
+ | Nous allons donc supprimer le serveur default_server de ce bloc serveur et du prochain serveur. | ||
+ | |||
+ | Vous pouvez choisir d’ajouter cette option à l’un des blocs de votre serveur qui vous convient.< | ||
+ | server { | ||
+ | listen 80; | ||
+ | listen [::]:80; | ||
+ | |||
+ | . . . | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Vous pouvez vérifier que l' | ||
+ | |||
+ | Si des correspondances non commentées sont trouvées dans plus d'un fichier (indiqué dans la colonne la plus à gauche), Nginx signalera une configuration invalide. | ||
+ | </ | ||
+ | |||
+ | La prochaine chose que nous devrons ajuster est la racine du document, spécifiée par la directive root. | ||
+ | |||
+ | Faites-la pointer sur la racine du site que vous avez créée :<code - / | ||
+ | server { | ||
+ | listen 80; | ||
+ | listen [::]:80; | ||
+ | |||
+ | root / | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Ensuite, nous devons modifier le nom du serveur pour qu'il corresponde aux demandes de notre premier domaine. | ||
+ | |||
+ | Nous pouvons en outre ajouter tous les alias que nous voulons faire correspondre. | ||
+ | |||
+ | Nous allons ajouter un alias www.example.com pour démonstration. | ||
+ | |||
+ | Lorsque vous avez terminé, votre fichier ressemblera à ceci :<code - / | ||
+ | server { | ||
+ | listen 80; | ||
+ | listen [::]:80; | ||
+ | |||
+ | root / | ||
+ | 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. | ||
+ | |||
+ | === Créer le deuxième fichier bloc server === | ||
+ | |||
+ | Maintenant que nous avons notre configuration de bloc server initiale, nous pouvons l' | ||
+ | |||
+ | Recopiez-le pour créer un nouveau fichier :<cli prompt=' | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | |||
+ | Encore une fois, assurez-vous de ne pas utiliser l' | ||
+ | |||
+ | Ajustez la directive root pour qu' | ||
+ | |||
+ | Lorsque vous aurez terminé, votre fichier ressemblera probablement à ceci :<code - / | ||
+ | server { | ||
+ | listen 80; | ||
+ | listen [::]:80; | ||
+ | |||
+ | root / | ||
+ | index index.html index.htm index.nginx-debian.html; | ||
+ | |||
+ | server_name test.com www.test.com; | ||
+ | |||
+ | location / { | ||
+ | try_files $uri $uri/ =404; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Activation des blocs servers et redémarrage de Nginx ==== | ||
+ | |||
+ | Maintenant que nous avons nos fichiers de blocs server, nous devons les activer. | ||
+ | |||
+ | Pour les activer, créez des liens symboliques en tapant :<cli prompt=' | ||
+ | USER@MACHINE: | ||
+ | |||
+ | Ces fichiers sont maintenant dans le répertoire activé. | ||
+ | |||
+ | Nous avons maintenant trois blocs server activés, configurés pour répondre en fonction de leur port d' | ||
+ | < | ||
+ | - **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 demandes sur le port 80 qui ne correspondent pas aux deux autres blocs. | ||
+ | </ | ||
+ | |||
+ | Pour éviter tout problème de mémoire pouvant résulter de l' | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | < | ||
+ | - Dans le fichier, recherchez la directive server_names_hash_bucket_size. | ||
+ | - Supprimez le symbole # pour supprimer la mise en commentaire de la ligne :<code - / | ||
+ | http { | ||
+ | . . . | ||
+ | server_names_hash_bucket_size 64; | ||
+ | . . . | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Ensuite, testez pour vous assurer qu'il n'y a pas d' | ||
+ | |||
+ | Si aucun problème n'a été détecté, redémarrez Nginx pour activer vos modifications :<cli prompt=' | ||
+ | |||
+ | Nginx devrait maintenant servir vos deux noms de domaine. | ||
+ | |||
+ | ==== Modifier votre fichier Hosts local pour le 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 des blocs server de Nginx. | ||
+ | |||
+ | Cela ne permettra pas aux autres visiteurs de voir votre site correctement, | ||
+ | |||
+ | 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. | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Assurez-vous que vous opérez sur votre ordinateur local au cours de ces étapes et non sur votre serveur VPS. | ||
+ | |||
+ | Vous devez avoir un accès root, être membre du groupe d’administration ou pouvoir modifier les fichiers système à cette fin. | ||
+ | </ | ||
+ | |||
+ | Éditez avec les droits d' | ||
+ | |||
+ | Vous devez connaître l' | ||
+ | |||
+ | En supposant que l' | ||
+ | 127.0.0.1 | ||
+ | . . . | ||
+ | 203.0.113.5 example.com www.example.com | ||
+ | 203.0.113.5 test.com www.test.com | ||
+ | </ | ||
+ | |||
+ | Cela interceptera toutes les requêtes de example.com et test.com et les enverra à votre serveur, ce que nous souhaitons si nous ne possédons pas les domaines que nous utilisons. | ||
+ | |||
+ | ==== Testez vos résultats ==== | ||
+ | |||
+ | * Ouvrez [[http:// | ||
+ | * En ouvrant [[http:// | ||
+ | |||
+ | Si ces deux sites fonctionnent, | ||
+ | |||
+ | À ce stade, si vous avez ajusté votre fichier hosts sur votre ordinateur local afin de le tester, vous voudrez probablement supprimer les lignes que vous avez ajoutées. | ||
+ | |||
+ | ===== Conclusion ===== | ||
+ | |||
+ | Vous pouvez créer des blocs server 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 server que vous pouvez créer, tant que votre matériel peut gérer le trafic. | ||
+ | |||
+ | ===== Problèmes connus ===== | ||
+ | |||
+ | ===== Voir aussi ===== | ||
+ | |||
+ | * **(en)** [[hhttps:// | ||
+ | |||
+ | ---- | ||
+ | //Basé sur << [[hhttps:// |