Serveur Apache HTTP Version 2.3
Ce document décrit quand et comment utiliser des serveurs virtuels par nom.
Les serveurs virtuels par IP utilisent l'adresse IP de la connexion afin de déterminer quel serveur virtuel doit répondre. Par conséquent, vous devez disposer d'adresses IP différentes pour chaque serveur.
Avec un hébergement virtuel par nom, le serveur s'appuie sur les informations transmises par le client dans les en-têtes HTTP de ses requêtes. La technique présentée ici vous permet de disposer de serveurs virtuels différents partagés sur une même adresse IP.
L'hébergement virtuel par nom est habituellement plus simple, car il vous suffit de configurer votre serveur DNS pour que chaque domaine pointe sur l'adresse IP dont vous disposez, et de configurer votre serveur Apache HTTP afin qu'il reconnaisse ces domaines. Il réduit aussi la pénurie en adresses IP. Par conséquent, vous devriez utiliser l'hébergement virtuel par nom à moins d'avoir une raison spécifique de préférer l'hébergement virtuel par IP. Certaines de ces raisons vous sont exposées ci-après :
Modules Apparentés | Directives Apparentées |
---|---|
Pour utiliser des serveurs virtuels par nom, vous devez
désigner l'adresse IP (et si possible le port) sur le serveur
devant accepter les requêtes qui doivent être redirigées en fonction
du nom d'hôte. Cette
configuration utilise la directive
NameVirtualHost
. Dans un
cas normal où n'importe quelle adresse IP peut être utilisée,
vous pouvez ajouter *
comme argument de la directive
NameVirtualHost
. Si vous
prévoyez d'utiliser de multiples ports (comme l'emploi de SSL),
vous devez ajouter le port à cet argument tel que
*:80
.
Notez que la simple mention d'une adresse
IP dans une directive
NameVirtualHost
ne suffit
pas à faire écouter le serveur sur cette IP. Consultez
Définition des adresses et ports qu'utilise
Apache pour plus
de détails. Par ailleurs, chaque adresse IP spécifiée ici doit
être associée avec une interface réseau sur le serveur.
L'étape suivante est la création d'une section
<VirtualHost>
pour chacun des serveurs à créer. L'argument de la directive
<VirtualHost>
doit être le même que celui de la directive
NameVirtualHost
(dans le cas présent "*:80"). Dans chaque section
<VirtualHost>
,
vous devez définir au minimum une directive
ServerName
pour désigner
le serveur concerné et une directive
DocumentRoot
pour préciser
l'emplacement sur le système de fichiers du contenu de ce serveur.
Si vous ajoutez des serveurs virtuels à un serveur Web
existant, vous devez également créer une section
<VirtualHost>
redéfinissant ce serveur existant. Les directives
ServerName
et
DocumentRoot
incluses
dans ce serveur virtuel doivent être les mêmes que pour
les directives globales
ServerName
et
DocumentRoot
. Positionnez
ce serveur virtuel en premier dans le fichier de configuration
pour en faire le serveur par défaut.
Par exemple, supposez que vous hébergez le domaine
www.domain.tld
et que vous souhaitez ajouter le
serveur virtuel www.otherdomain.tld
qui pointe sur
la même adresse IP. Il vous suffit d'ajouter la configuration
suivante à httpd.conf
:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
Autrement, vous pouvez spécifiez une adresse IP explicite
à la place de *
dans les deux directives
NameVirtualHost
et
<VirtualHost>
.
Par exemple, cette méthode est utile si vous souhaitez faire
tourner quelques serveurs virtuels par nom sur une même adresse
IP, et d'autres, soit par IP, soit basés sur un autre jeu de
serveurs 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
<VirtualHost>
.
Par exemple, dans la première section
<VirtualHost>
ci-dessus, la directive ServerAlias
indique aux utilisateurs les autres noms permis pour accéder au
même site Web :
ServerAlias domain.tld *.domain.tld
ainsi, toutes les requêtes portant sur un domaine
domain.tld
seront servies par le serveur virtuel
www.domain.tld
. 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
. Tout d'abord, votre serveur DNS
doit être correctement configuré pour lier ces noms à une
adresse IP associée avec votre serveur.
Finalement, vous pouvez affiner la configuration des serveurs
virtuels en plaçant d'autres directives à l'intérieur des sections
<VirtualHost>
.
La plupart des directives peut être placée dans ces sections en
y changeant seulement la configuration du serveur 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
<VirtualHost>
)
sera utilisé seulement s'il n'y a pas de configuration contraire
par un serveur virtuel.
Maintenant, lorsqu'une requête arrive, le serveur va d'abord
tester si elle utilise une adresse IP qui correspond à
NameVirtualHost
. Si c'est
le cas, il regardera chaque section
<VirtualHost>
avec l'adresse correspondante et essaiera d'en trouver une où
le nom de domaine requis correspond à
ServerName
ou
ServerAlias
. S'il en trouve une, il utilisera
sa configuration pour le serveur. Si aucun serveur virtuel ne
correspond, alors le premier serveur virtuel listé
dont l'adresse IP correspond sera employé.
En conséquence, le premier serveur virtuel listé est le
serveur virtuel par défaut. La directive
DocumentRoot
du
serveur principal ne sera
jamais employée lorsqu'une adresse IP
correspond à la directive
NameVirtualHost
. Si vous
souhaiter avoir une configuration spéciale pour les requêtes
qui ne correspondent pas à un serveur virtuel en particulier,
mettez cette configuration dans une section
<VirtualHost>
que vous placerez en premier dans le fichier de configuration.