<-
Apache > Serveur HTTP > Documentation > Version 2.4 > Serveurs virtuels

D�tails sur le fonctionnement des serveurs virtuels

Langues Disponibles:  en  |  fr  |  ko  |  tr 

Ce document vise � expliquer dans le d�tail comment le serveur HTTP Apache proc�de lors du choix de l'utilisation d'un serveur virtuel en fonction d'une requ�te re�ue.

Il est recommand� de lire la documentation Serveurs virtuels � base de nom et serveurs virtuels � base d'adresse IP pour d�terminer quel type de serveur virtuel nous convient le mieux, puis de lire les documentations serveurs virtuels � base de nom ou serveurs virtuels � base d'adresse IP, et enfin d'�tudier quelques exemples.

Si vous voulez entrer dans les d�tails, vous pouvez revenir vers cette page.

Voir aussi

top

Fichier de configuration

Un serveur principal (main_server) contient toutes les d�finitions qui apparaissent en dehors des sections <VirtualHost>.

Les serveurs virtuels, aussi appel�s vhosts (pour virtual hosts), sont d�finis par les sections <VirtualHost>.

Chaque directive VirtualHost comporte une ou plusieurs adresses et des ports optionnels.

Il est possible d'utiliser des noms d'h�tes dans la d�finition d'un serveur virtuel, mais ils seront r�solus en adresses IP au d�marrage du serveur, et si une r�solution de nom �choue, cette d�finition de serveur virtuel sera ignor�e. Cette m�thode est par cons�quent d�conseill�e.

L'adresse peut �tre sp�cifi�e sous la forme *, ce qui conviendra � la requ�te si aucun autre serveur virtuel ne poss�de l'adresse IP explicite correspondant � celle de la requ�te.

L'adresse qui appara�t dans la directive VirtualHost peut �tre associ�e � un port optionnel. Si aucun port n'est sp�cifi�, il s'agit d'un port g�n�rique qui peut aussi �tre sp�cifi� comme *. Le port g�n�rique correspond � toutes les valeurs de port.

(Il ne faut pas confondre les num�ros de port sur lesquels Apache est en �coute avec les num�ros de port sp�cifi�s dans la directive VirtualHost ; ces derniers ne servent qu'� d�finir le serveur virtuel qui sera s�lectionn� pour traiter la requ�te. Pour d�finir les ports sur lesquels Apache est en �coute, utilisez la directive Listen).

L'ensemble des adresses (y compris les r�sultats multiples A issus des requ�tes DNS) est appel� jeu d'adresses du serveur virtuel.

Apache fait automatiquement sa s�lection � partir de l'en-t�te HTTP Host fourni par le client, lorsque la correspondance la plus exacte du point de vue adresse IP/port a lieu pour plusieurs serveurs virtuels.

La directive ServerName peut appara�tre en quelque endroit de la d�finition d'un serveur. Cependant, chaque occurrence �crase la pr�c�dente (pour ce serveur). Si aucune directive ServerName n'est sp�cifi�e, le serveur tente de d�terminer le nom du serveur � partir de l'adresse IP.

Le premier serveur virtuel � base de nom apparaissant dans le fichier de configuration pour une paire IP:port donn�e est significatif car c'est lui qui sera utilis� pour toutes les requ�tes re�ues sur cette adresse IP/port et pour laquelle aucun autre serveur virtuel ne poss�de un ServerName ou un ServerAlias correspondant. Il sera aussi utilis� pour toutes les connexions SSL si le serveur ne supporte pas l'Indication du nom du serveur.

Tous les noms sp�cifi�s au sein d'une section VirtualHost sont trait�s comme un ServerAlias (sans caract�res g�n�riques), mais ne sont �cras�s par aucune directive ServerAlias.

Pour chaque serveur virtuel, diverses valeurs sont initialis�es par d�faut. En particulier :

  1. Dans le cas o� un serveur virtuel ne contient pas de directives ServerAdmin, Timeout, KeepAliveTimeout, KeepAlive, MaxKeepAliveRequests, ReceiveBufferSize, ou SendBufferSize, alors la valeur de chacun de ces param�tres est h�rit�e de celle du serveur principal. (C'est � dire, h�rit�e de la valeur finale apr�s lecture de la configuration du serveur principal.)
  2. Les permissions par d�faut sur les r�pertoires de chaque serveur virtuel sont assembl�es avec celles du serveur principal. Elles concernent �galement toutes les informations de configuration par r�pertoire pour tous les modules.
  3. Les configurations par serveur pour chaque module sont assembl�es � partir de celles du serveur principal.

L'essentiel des valeurs de configuration des serveurs virtuels provient de valeurs par d�faut issues du serveur principal. Mais la position dans le fichier de configuration des directives du serveur principal n'a pas d'importance -- l'ensemble de la configuration du serveur principal est lu avant que ces valeurs par d�faut soient appliqu�es aux serveur virtuels. Ainsi, m�me si la d�finition d'une valeur appara�t apr�s celle d'un serveur virtuel, cette valeur peut affecter la definition du serveur virtuel.

Dans le cas o� le serveur principal n'a pas de ServerName � ce stade, le nom de la machine sur laquelle tourne le programme httpd est utilis� � sa place. Nous appellerons jeu d'adresses du serveur principal les adresses IP renvoy�es par une r�solution DNS sur le ServerName du serveur principal.

Pour tous les champs ServerName non d�finis, dans le cas d'une configuration en serveur virtuel par nom, la valeur adopt�e par d�faut est la premi�re adresse donn�e dans la section VirtualHost qui d�finit le serveur virtuel.

Si un serveur virtuel contient la valeur magique _default_, il fonctionne sur le m�me ServerName que le serveur principal.

top

Choix du serveur virtuel

� la r�ception d'une requ�te, le serveur proc�de comme suit pour d�terminer quel serveur virtuel utiliser :

Recherche de l'adresse IP

Lors d'une premi�re connexion sur une adresse/port, le serveur recherche toutes les directives VirtualHost qui poss�dent la m�me adresse IP/port.

S'il n'y a aucune correspondance exacte pour cette adresse/port, la recherche s'effectue sur la valeur g�n�rique (*).

Si aucune correspondance n'est enfin trouv�e, la requ�te sera servie par le serveur principal.

S'il existe des d�finitions VirtualHost pour l'adresse IP, l'�tape suivante consiste � d�terminer si nous avons � faire � un serveur virtuel � base de nom ou d'adresse IP.

Serveur virtuel par IP

Si une seule section VirtualHost pr�sente la meilleure correspondance avec la paire adresse IP/port, aucune action n'est entreprise et la requ�te est trait�e par le serveur virtuel qui correspond.

Serveur virtuel par nom

Si plusieurs sections VirtualHost pr�sentent la meilleure correspondance avec la paire adresse IP/port, le terme "liste" dans les �tapes suivantes fait r�f�rence � la liste des serveurs virtuels qui correspondent, selon l'ordre dans lequel ils apparaissent dans le fichier de configuration.

Si la connexion utilise SSL, si le serveur supporte l'Indication de nom de serveur, et si la n�gociation du client SSL inclut l'extension TLS dans le nom d'h�te requis, alors ce nom d'h�te sera utilis� par la suite, tout comme un en-t�te Host: aurait �t� utilis� dans le cas d'une connexion non-SSL. Si ces conditions ne sont pas r�unies, le premier serveur virtuel � base de nom dont l'adresse correspond sera utilis� pour les connexions SSL. Ceci est important car c'est le serveur virtuel qui d�termine quel certificat le serveur va utiliser pour la connexion.

Si la requ�te contient un en-t�te Host:, on recherche dans la liste le premier serveur virtuel dont le ServerName ou le ServerAlias correspond, et c'est celui-ci qui va traiter la requ�te. Un en-t�te Host: peut comporter un num�ro de port mais Apache l'ignore syst�matiquement et utilise toujours le port sur lequel il a effectivement re�u la requ�te.

Le premier serveur virtuel du fichier de configuration qui poss�de l'adresse sp�cifi�e est prioritaire et intercepte toutes les requ�tes � destination d'un nom de serveur inconnu, ou toute requ�te sans en-t�te Host: (comme les requ�tes HTTP/1.0).

Connexions persistantes

La recherche par adresse IP d�crite ci-avant n'est faite qu'une fois pour chaque session TCP/IP, alors que la recherche par nom est r�alis�e pour chaque requ�te au cours d'une connexion persistante (KeepAlive). En d'autres termes, il est possible pour un client de faire des requ�tes sur diff�rents serveurs virtuels par nom, au cours d'une unique connexion persistante.

URI absolu

Au cas o� l'URI de la requ�te est absolu, et que son nom de serveur et son port correspondent au serveur principal (ou l'un des serveurs virtuels configur�s), et qu'ils correspondent � l'adresse et au port de la requ�te, alors l'URI est amput� de son pr�fixe protocole/nom de serveur/port et trait� par le serveur correspondant (principal ou virtuel). Si cette correspondance n'existe pas, l'URI reste inchang� et la requ�te est consid�r�e comme une requ�te d'un serveur mandataire (proxy).

Observations

top

Trucs et astuces

En plus des points �voqu�s sur la page des probl�mes li�s au DNS, voici quelques points int�ressants :

Langues Disponibles:  en  |  fr  |  ko  |  tr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.