{{tag>Logiciel}} ====== Apache : Hôtes virtuels ====== Les Hôtes Virtuels d'un serveur web Apache permettent d'héberger un ou plusieurs sites Web (correspondant à des domaines comme www.company1.example.com et www.company2.example.com) sur une même machine. L'utilisateur final ne perçoit pas qu'en fait il s'agit d'un même serveur physique. Les hôtes virtuels peuvent être : * **par-IP (cf. [[https://httpd.apache.org/docs/2.4/vhosts/ip-based.html]])** : une adresse IP différente pour chaque serveur Web * **ou par-nom** : plusieurs noms de domaine se côtoient sur des mêmes adresses IP. **Préférez l'hébergement virtuel par nom**, plus simple (de plus, il économise les adresses IP), sauf en cas d'utilisation d'équipements qui nécessitent un hébergement basé sur IP : * il suffit de configurer le serveur DNS pour que chaque domaine pointe sur l'adresse IP du serveur * et de configurer le serveur Apache pour qu'il reconnaisse ces domaines Nous parlerons donc ici des hôtes virtuels par nom. Le serveur s’appuie sur les informations transmises dans les en-têtes HTTP des requêtes. Les noms utilisés doivent être définis sur le serveur DNS et être liés à une adresse IP associée au serveur. Un hôte virtuel par nom associe un nom de domaine et son site web : chaque domaine ou site, configuré dans Apache, dirige le visiteur vers un répertoire spécifique contenant les fichiers de ce site. Un serveur web peut donc héberger et gérer plusieurs sites web grâce à ce système de virtualisation. C'est le principe d'un serveur mutualisé. La résolution d'un hôte virtuel par nom choisit le plus approprié parmi les candidats dont l'IP convient le mieux. C'est sans objet si l'on utilise un joker (*) pour l'adresse IP dans les directives VirtualHost : - Le serveur recherche la section **** ayant la meilleure correspondance avec la paire **adresse IP/port** utilisée dans la requête. Si plusieurs hôtes virtuels ont la même paire **adresse IP/port**, Apache compare les valeurs des directives **ServerName** et **ServerAlias** au nom de serveur présent dans la requête. - **Toujours mettre une directive ServerName** dans un hôte virtuel par car cela conduirait à des erreurs. - **Si aucune directive ServerName ou ServerAlias ne correspond** dans la liste des hôtes virtuels présentant la meilleure correspondance du point de vue adresse IP/port, c'est le premier hôte virtuel de cette liste qui sera utilisé. ===== Pré-requis ===== ===== Installation ===== ===== Configuration ===== Depuis la version 2.4, la syntaxe des fichiers vhosts a changé : - Le nom des fichiers doit se terminer par **.conf** - Les directives **Allow** sont remplacées par **Require** ^ ^ Remplacer (ancienne syntaxe) ^ par ^ ^ autoriser toutes les requêtes | Order allow,deny Allow from all ^ Require all granted ^ ^ interdire toutes les requêtes | Order deny,allow Deny from all ^ Require all denied ^ - **Pour chaque domaine** à définir, créez un fichier /etc/apache2/sites-available/domaine.tld.conf - Dans ce fichier, créez une section **VirtualHost** pour chaque domaine ou sous-domaine : ServerName www.domaine.tld ServerAlias domaine.tld *.domaine.tld DocumentRoot /var/www/html/www.domaine.tld ... * Le premier hôte virtuel du fichier est l'hôte par défaut. * **__Directives obligatoires__** d'une section VirtualHost : * **ServerName** : nom du serveur * **DocumentRoot** : racine du serveur sur le système de fichiers * **__Directives facultatives__** : * **ServerAlias** : autres noms permis pour accéder au même site Web (jokers * et ? autorisés) - **Tutoriel : [[tutoriel:internet:serveur:apache:vhost:start|]]** ===== Utilisation ===== - **[[tutoriel:internet:serveur:apache:vhost:exemples:start]]** Supposons que : * vous hébergez le domaine www.exemple.com * et vous souhaitez ajouter l'hôte virtuel other.exemple.com qui pointe sur la même adresse IP. Créez le fichier : # Le premier hôte virtuel de la liste est aussi le serveur par défaut pour *:80 ServerName www.example.com ServerAlias example.com DocumentRoot "/www/domain" ServerName other.example.com DocumentRoot "/www/otherdomain" On peut aussi spécifier une adresse IP explicite à la place de * dans la directive . Cela permet de faire tourner des hôtes virtuels par nom sur une même adresse IP, et d'autres, soit par IP, soit basés sur un autre jeu d'hôtes virtuels par nom sur une autre adresse IP. Plusieurs serveurs sont accessibles par plus d'un nom. Il suffit de placer la directive ServerAlias dans une section . Par exemple, dans la première section ci-dessus, la directive ServerAlias indique aux utilisateurs les autres noms permis pour accéder au même site Web : ServerAlias exemple.com *.exemple.com Les requêtes portant sur un domaine example.com seront servies par l'hôte virtuel www.example.com. Les caractères joker * et ? peuvent être utilisés pour les correspondances. Bien entendu, vous ne pouvez pas inventer des noms et les placer dans une directive ServerName ou ServerAlias. Il faut d'abord configurer votre serveur DNS pour lier ces noms à une adresse IP associée avec votre serveur. La recherche del'hôte virtuel par nom qui correspond au plus près à la requête s'effectue parmi les selon leur ordre d'apparition dans le fichier de configuration. Le premier hôte virtuel dont le ServerName ou le ServerAlias correspond est utilisé, sans priorité particulière en cas de présence de caractères génériques (que ce soit pour le ServerName ou le ServerAlias). La liste complète des noms dans la section VirtualHost est traitée comme une directive ServerAlias sans caractères génériques. Vous pouvez affiner la configuration des hôtes virtuels en plaçant d'autres directives à l'intérieur des sections . La plupart des directives peut être placée dans ces sections en y changeant seulement la configuration de l'hôte virtuel associé. Pour déterminer si une directive particulière est permise, consultez le contexte de la directive. Le jeu de directives configurées dans le contexte du serveur principal (en dehors de toutes sections ) sera utilisé seulement s'il n'y a pas de configuration contraire par un hôte virtuel. ===== Désinstallation ===== ===== Problèmes connus ===== ===== Voir aussi ===== * **(fr)** [[https://httpd.apache.org/docs/2.4/vhosts/|Documentation sur les serveurs virtuels Apache]] ---- //Basé sur << [[https://httpd.apache.org/docs/2.4/vhosts/|Documentation sur les serveurs virtuels Apache]] >> par The Apache Software Foundation.//