From: André Malo 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. 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
+ 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 +
Si vous voulez entrer dans les détails, vous pouvez revenir vers cette page.
-Un serveur principal (main_server) contient toutes
- les définitions qui apparaissent en dehors des sections
+ 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
+ appelés vhosts (pour virtual hosts), sont définis par les
sections
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.
+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
+ ê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,
+
(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
L'ensemble des adresses (y compris les résultats multiples
- L'ensemble des adresses (y compris les résultats multiples
+ Apache fait automatiquement sa sélection à partir de l'en-tête
+ Apache fait automatiquement sa sélection à partir de l'en-tête
HTTP La directive 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
+ 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' Tous les noms spécifiés au sein d'une section
- Tous les noms spécifiés au sein d'une section
+ Pour chaque serveur virtuel, diverses valeurs sont initialisées
- par défaut. En particulier : Pour chaque serveur virtuel, diverses valeurs sont initialisées
+ par défaut. En particulier :A issus des requêtes DNS) est appelé jeu
+ A issus des requêtes DNS) est appelé jeu
d'adresses du serveur virtuel.Host fourni par le client, lorsque la
correspondance la plus exacte du point de vue adresse IP/port a lieu
pour plusieurs serveurs virtuels.ServerName n'est spécifiée, le
- serveur tente de déterminer le nom du serveur à partir de l'adresse
+ 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.VirtualHost sont traités comme un
- ServerAlias (sans caractères génériques), mais ne sont
- écrasés par aucune directive ServerAlias.VirtualHost sont traités comme un
+ ServerAlias (sans caractères génériques), mais ne sont
+ écrasés par aucune directive ServerAlias.
-
L'essentiel des valeurs de configuration des serveurs virtuels - provient de valeurs par défaut issues du serveur principal. + 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, + 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
-
Dans le cas où le serveur principal n'a pas de ServerName
+ Ã ce stade, le nom de la machine sur laquelle tourne le programme
+ ServerName
+ renvoyées par une résolution DNS sur le ServerName
du serveur principal.
Pour tous les champs ServerName non définis, dans
+
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.
VirtualHost qui définit le serveur virtuel.
Si un serveur virtuel contient la valeur magique
- _default_, il fonctionne sur le même ServerName
+ _default_, il fonctionne sur le même ServerName
que le serveur principal.
À la réception d'une requête, le serveur procède comme suit pour - déterminer quel serveur virtuel utiliser :
+à la réception d'une requête, le serveur procède comme suit pour + déterminer quel serveur virtuel utiliser :
Lors d'une première connexion sur une adresse/port, le serveur +
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 +
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.
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.
Si une seule section VirtualHost présente la
+
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.
Si plusieurs sections VirtualHost présentent la
+
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
+ "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'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
+ 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
+
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.
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).
Host: (comme les requêtes HTTP/1.0).
La recherche par adresse IP décrite ci-avant n'est faite +
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 + 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 + 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.
Au cas où l'URI de la requête est absolu, et que son nom de +
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 + 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).
+ n'existe pas, l'URI reste inchangé et la requête est considérée + comme une requête d'un serveur mandataire (proxy).ServerName et
+ ServerName et
ServerAlias ne sont jamais
- réalisées pour les serveurs virtuels par IP.Host: n'est jamais utilisé
+ Host: n'est jamais utilisé
pour les tests de correspondances. Apache ne prend en compte
- que le numéro de port sur lequel le client a envoyé la requête.*). En d'autres termes, le serveur
principal n'est utile que pour les combinaisons adresse/port
- non spécifiées (sauf quand un serveur virtuel _default_
+ non spécifiées (sauf quand un serveur virtuel _default_
correspond au port).VirtualHost, car cela oblige le serveur a s'appuyer
- sur le DNS au moment du démarrage. De plus, vous vous exposez
- à des problèmes de sécurité si vous n'avez pas la maîtrise du
- DNS pour la totalité de vos domaines. Voir la documentation
+ sur le DNS au moment du démarrage. De plus, vous vous exposez
+ à des problèmes de sécurité si vous n'avez pas la maîtrise du
+ DNS pour la totalité de vos domaines. Voir la documentation
disponible ici, ainsi que
- les deux points précisés ci-après.ServerName devrait toujours
- être indiqué pour chaque serveur virtuel. Sans cela, une
- résolution DNS est nécessaire pour chaque serveur virtuel.En plus des points évoqués sur la page des - problèmes liés au DNS, - voici quelques points intéressants :
+En plus des points évoqués sur la page des + problèmes liés au DNS, + voici quelques points intéressants :
VirtualHost.
- (Ceci améliore grandement la lisibilité de la configuration
- -- la manière dont la configuration est interprétée après la
- lecture des fichiers ne met pas en évidence le fait que les
- définitions positionnées avant et surtout après les serveurs
+ VirtualHost.
+ (Ceci améliore grandement la lisibilité de la configuration
+ -- la manière dont la configuration est interprétée après la
+ lecture des fichiers ne met pas en évidence le fait que les
+ définitions positionnées avant et surtout après les serveurs
virtuels peuvent impacter le fonctionnement de tous les
serveurs virtuels.)Le but de ce document est d'essayer de répondre aux questions - les plus répandues sur la configuration des serveurs virtuels. - Les scénarios présentés ici se rencontrent quand plusieurs - serveurs Webs doivent tourner sur une seule et même machine au +
Le but de ce document est d'essayer de répondre aux questions + les plus répandues sur la configuration des serveurs virtuels. + Les scénarios présentés ici se rencontrent quand plusieurs + serveurs Webs doivent tourner sur une seule et même machine au moyen de serveurs virtuels par nom ou par IP.
@@ -40,23 +40,23 @@Votre serveur possède plusieurs noms d'hôte qui correspondent à
- une seule adresse IP, ce qui lui permet de répondre différemment si
- une requête est envoyée à www.example.com ou
+
Votre serveur possède plusieurs noms d'hôte qui correspondent Ã
+ une seule adresse IP, ce qui lui permet de répondre différemment si
+ une requête est envoyée à www.example.com ou
www.example.org.
La configuration de serveurs virtuels
sous Apache ne provoque pas leur apparition magique dans la
configuration du DNS. Il faut que leurs noms soient
- définis dans le DNS, et qu'ils y soient résolus sur l'adresse IP
+ définis dans le DNS, et qu'ils y soient résolus sur l'adresse IP
du serveur, faute de quoi personne ne pourra visiter votre site Web.
- Il est possible d'ajouter des entrées dans le fichier
+ Il est possible d'ajouter des entrées dans le fichier
hosts pour tests locaux, mais qui ne fonctionneront
- que sur la machine possédant ces entrées.
Les astérisques correspondent à toutes les adresses, si bien que - le serveur principal ne répondra jamais à aucune requête. Comme le +
Les astérisques correspondent à toutes les adresses, si bien que
+ le serveur principal ne répondra jamais à aucune requête. Comme le
serveur virtuel
ServerName www.example.com se trouve en premier dans le fichier
- de configuration, il a la plus grande priorité et peut être vu
- comme serveur par défaut ou primaire ;
- ce qui signifie que toute requête reçue ne correspondant à aucune
+ de configuration, il a la plus grande priorité et peut être vu
+ comme serveur par défaut ou primaire ;
+ ce qui signifie que toute requête reçue ne correspondant à aucune
des directives
La configuration ci-dessus correspond à ce que l'on souhaite pour - la plupart des serveurs virtuels à base de nom. Il faudra cependant - utiliser une configuration différente si vous souhaitez servir un - contenu différent en fonction de l'adresse IP ou du port.
+La configuration ci-dessus correspond à ce que l'on souhaite pour + la plupart des serveurs virtuels à base de nom. Il faudra cependant + utiliser une configuration différente si vous souhaitez servir un + contenu différent en fonction de l'adresse IP ou du port.
Vous pouvez remplacer *
- par une adresse IP du système. Le serveur virtuel concerné
- ne sera alors sélectionné que pour les requêtes HTTP vers
+ par une adresse IP du système. Le serveur virtuel concerné
+ ne sera alors sélectionné que pour les requêtes HTTP vers
cette adresse IP.
En général, il est commode d'utiliser * sur
- les systèmes dont l'adresse IP n'est pas constante - par
- exemple, pour des serveurs dont l'adresse IP est attribuée
- dynamiquement par le FAI, et où le DNS est géré au moyen
+
En général, il est commode d'utiliser * sur
+ les systèmes dont l'adresse IP n'est pas constante - par
+ exemple, pour des serveurs dont l'adresse IP est attribuée
+ dynamiquement par le FAI, et où le DNS est géré au moyen
d'un DNS dynamique quelconque. Comme * signifie
n'importe quelle adresse, cette configuration
- fonctionne sans devoir être modifiée quand l'adresse IP du
- système est modifiée.
Toutes les techniques présentées ici - peuvent être étendues à un plus grand nombre d'adresses IP.
+Toutes les techniques présentées ici + peuvent être étendues à un plus grand nombre d'adresses IP.
Le serveur a deux adresses IP. Sur l'une
(172.20.30.40), le serveur "principal"
- server.example.com doit répondre, et sur l'autre
+ server.example.com doit répondre, et sur l'autre
(172.20.30.50), deux serveurs virtuels (ou plus)
- répondront.
Toute requête arrivant sur une autre adresse que +
Toute requête arrivant sur une autre adresse que
172.20.30.50 sera servie par le serveur principal.
- Les requêtes vers 172.20.30.50 avec un nom de serveur
- inconnu, ou sans en-tête Host:, seront servies par
+ Les requêtes vers 172.20.30.50 avec un nom de serveur
+ inconnu, ou sans en-tête Host:, seront servies par
www.example.com.
La machine serveur dispose de deux adresses IP
(192.168.1.1 et 172.20.30.40). Cette
- machine est placée à la fois sur le réseau interne (l'Intranet)
- et le réseau externe (Internet). Sur Internet, le nom
+ machine est placée à la fois sur le réseau interne (l'Intranet)
+ et le réseau externe (Internet). Sur Internet, le nom
server.example.com pointe vers l'adresse externe
- (172.20.30.40), mais sur le réseau interne, ce même
+ (172.20.30.40), mais sur le réseau interne, ce même
nom pointe vers l'adresse interne (192.168.1.1).
Le serveur peut être configuré pour répondre de la même manière - aux requêtes internes et externes, au moyen d'une seule section +
Le serveur peut être configuré pour répondre de la même manière
+ aux requêtes internes et externes, au moyen d'une seule section
Ainsi, les requêtes en provenance de chacun des deux réseaux
- seront servies par le même
Sur le réseau interne, il est possible +
Sur le réseau interne, il est possible
d'utiliser le nom raccourci server au lieu du nom
complet server.example.com.
Notez également que dans l'exemple précédent, vous pouvez +
Notez également que dans l'exemple précédent, vous pouvez
remplacer la liste des adresses IP par des * afin
- que le serveur réponde de la même manière sur toutes ses
+ que le serveur réponde de la même manière sur toutes ses
adresses.
Vous disposez de plusieurs domaines pointant sur la même adresse - IP et vous voulez également servir de multiples ports. L'exemple - suivant montre que la sélection en fonction du nom intervient après - la sélection de la meilleure correspondance du point de vue adresse +
Vous disposez de plusieurs domaines pointant sur la même adresse + IP et vous voulez également servir de multiples ports. L'exemple + suivant montre que la sélection en fonction du nom intervient après + la sélection de la meilleure correspondance du point de vue adresse IP/port.
Le serveur dispose de deux adresses IP (172.20.30.40
et 172.20.30.50) correspondant respectivement aux noms
@@ -250,20 +250,20 @@ Listen 80
</VirtualHost>
-
Les requêtes provenant d'adresses non spécifiées dans l'une des +
Les requêtes provenant d'adresses non spécifiées dans l'une des
directives <VirtualHost> (comme pour
- localhost par exemple) seront dirigées vers le serveur
+ localhost par exemple) seront dirigées vers le serveur
principal, s'il en existe un.
Le serveur dispose de deux adresses IP (172.20.30.40
et 172.20.30.50) correspondant respectivement aux noms
www.example.com et www.example.org.
- Pour chacun d'eux, nous voulons un hébergement sur les ports 80
+ Pour chacun d'eux, nous voulons un hébergement sur les ports 80
et 8080.
Toute adresse indiquée comme argument d'une section VirtualHost +
Toute adresse indiquée comme argument d'une section VirtualHost et n'apparaissant dans aucun autre serveur virtuel, fait de cette - section un serveur virtuel sélectionnable uniquement en fonction de + section un serveur virtuel sélectionnable uniquement en fonction de son adresse IP.
Virtual_host et de mod_proxyL'exemple suivant montre comment une machine peut mandater
un serveur virtuel fonctionnant sur le serveur d'une autre machine.
- Dans cet exemple, un serveur virtuel de même nom est configuré sur
- une machine à l'adresse 192.168.111.2. La directive
+ Dans cet exemple, un serveur virtuel de même nom est configuré sur
+ une machine à l'adresse 192.168.111.2. La directive
_default_ pour tous les portsExemple de capture de toutes les requêtes émanant - d'adresses IP ou de ports non connus, c'est-à-dire, d'un - couple adresse/port non traité par aucun autre serveur virtuel.
+Exemple de capture de toutes les requêtes émanant + d'adresses IP ou de ports non connus, c'est-à -dire, d'un + couple adresse/port non traité par aucun autre serveur virtuel.
L'utilisation d'un tel serveur virtuel avec un joker pour le - port empêche de manière efficace qu'une requête n'atteigne le + port empêche de manière efficace qu'une requête n'atteigne le serveur principal.
-Un serveur virtuel par défaut ne servira jamais une requête - qui est envoyée vers un couple adresse/port utilisée par un - serveur virtuel par nom. Si la requête contient un en-tête +
Un serveur virtuel par défaut ne servira jamais une requête
+ qui est envoyée vers un couple adresse/port utilisée par un
+ serveur virtuel par nom. Si la requête contient un en-tête
Host: inconnu, ou si celui-ci est absent, elle
sera toujours servie par le serveur virtuel primaire par nom
- (celui correspondant à ce couple adresse/port trouvé en premier
+ (celui correspondant à ce couple adresse/port trouvé en premier
dans le fichier de configuration).
Vous pouvez utiliser une directive
_default_ pour des ports différents_default_ pour des ports différentsLa configuration est similaire à l'exemple précédent, mais
- le serveur écoute sur plusieurs ports et un second serveur virtuel
- _default_ pour le port 80 est ajouté.
La configuration est similaire à l'exemple précédent, mais
+ le serveur écoute sur plusieurs ports et un second serveur virtuel
+ _default_ pour le port 80 est ajouté.
Le serveur virtuel par défaut défini pour le port 80 (il doit - impérativement être placé avant un autre serveur virtuel par - défaut traitant tous les ports grâce au joker *) capture toutes - les requêtes envoyées sur une adresse IP non spécifiée. Le - serveur principal n'est jamais utilisé pour servir une requête.
+Le serveur virtuel par défaut défini pour le port 80 (il doit + impérativement être placé avant un autre serveur virtuel par + défaut traitant tous les ports grâce au joker *) capture toutes + les requêtes envoyées sur une adresse IP non spécifiée. Le + serveur principal n'est jamais utilisé pour servir une requête.
_default_ pour un seul portNous voulons créer un serveur virtuel par défaut seulement +
Nous voulons créer un serveur virtuel par défaut seulement pour le port 80.
Une requête vers une adresse non spécifiée sur le port 80 - sera servie par le serveur virtuel par défaut, et toute autre - requête vers une adresse et un port non spécifiés sera servie +
Une requête vers une adresse non spécifiée sur le port 80 + sera servie par le serveur virtuel par défaut, et toute autre + requête vers une adresse et un port non spécifiés sera servie par le serveur principal.
-L'utilisation du caractère générique * dans la
- déclaration d'un serveur virtuel l'emporte sur
+
L'utilisation du caractère générique * dans la
+ déclaration d'un serveur virtuel l'emporte sur
_default_.
Le serveur virtuel par nom avec le nom de domaine
www.example.org (de notre exemple
par nom) devrait obtenir sa propre adresse IP. Pendant la
- phase de migration, il est possible d'éviter les problèmes avec
- les noms de serveurs et autres serveurs mandataires qui mémorisent
+ phase de migration, il est possible d'éviter les problèmes avec
+ les noms de serveurs et autres serveurs mandataires qui mémorisent
les vielles adresses IP pour les serveurs virtuels par nom.
La solution est simple, car il suffit d'ajouter la nouvelle
adresse IP (172.20.30.50) dans la directive
@@ -476,7 +476,7 @@ DocumentRoot "/www/example1"
</VirtualHost>
-
Le serveur virtuel peut maintenant être joint par la nouvelle +
Le serveur virtuel peut maintenant être joint par la nouvelle adresse (comme un serveur virtuel par IP) et par l'ancienne adresse (comme un serveur virtuel par nom).
@@ -485,15 +485,15 @@ DocumentRoot "/www/example1"ServerPathDans le cas où vous disposez de deux serveurs virtuels par nom,
- le client doit transmettre un en-tête Host: correct
- pour déterminer le serveur concerné. Les vieux clients HTTP/1.0
- n'envoient pas un tel en-tête et Apache n'a aucun indice pour
- connaître le serveur virtuel devant être joint (il sert la
- requête à partir d'un serveur virtuel primaire). Dans un soucis
- de préserver la compatibilité descendante, il suffit de créer
- un serveur virtuel primaire chargé de retourner une page contenant
- des liens dont les URLs auront un préfixe identifiant les serveurs
+
Dans le cas où vous disposez de deux serveurs virtuels par nom,
+ le client doit transmettre un en-tête Host: correct
+ pour déterminer le serveur concerné. Les vieux clients HTTP/1.0
+ n'envoient pas un tel en-tête et Apache n'a aucun indice pour
+ connaître le serveur virtuel devant être joint (il sert la
+ requête à partir d'un serveur virtuel primaire). Dans un soucis
+ de préserver la compatibilité descendante, il suffit de créer
+ un serveur virtuel primaire chargé de retourner une page contenant
+ des liens dont les URLs auront un préfixe identifiant les serveurs
virtuels par nom.
À cause de la directive
-
à cause de la directive
+ http://www.sub1.domain.tld/sub1/ est
toujours servie par le serveur sub1-vhost.
- Une requête sur une URL http://www.sub1.domain.tld/ n'est
- servie par le serveur sub1-vhost que si le client envoie un en-tête
- Host: correct. Si aucun en-tête Host:
- n'est transmis, le serveur primaire sera utilisé.
Notez qu'il y a une singularité : une requête sur
- http://www.sub2.domain.tld/sub1/ est également servie
- par le serveur sub1-vhost si le client n'envoie pas d'en-tête
+ Une requête sur une URL http://www.sub1.domain.tld/ n'est
+ servie par le serveur sub1-vhost que si le client envoie un en-tête
+ Host: correct. Si aucun en-tête Host:
+ n'est transmis, le serveur primaire sera utilisé.
Notez qu'il y a une singularité : une requête sur
+ http://www.sub2.domain.tld/sub1/ est également servie
+ par le serveur sub1-vhost si le client n'envoie pas d'en-tête
Host:.
Les directives Host: correct puisse utiliser d'autres variantes d'URLs,
- c'est-à-dire avec ou sans préfixe d'URL.
Quand de nombreux serveurs virtuels sont créés, Apache peut - dépasser les limites en descripteurs de fichiers ('file descriptors', - également appelés gestionnaires de fichiers) si chacun +
Quand de nombreux serveurs virtuels sont créés, Apache peut + dépasser les limites en descripteurs de fichiers ('file descriptors', + également appelés gestionnaires de fichiers) si chacun des serveurs virtuels utilise ses propres fichiers journaux. Le - nombre total de descripteurs de fichiers utilisés par Apache est + nombre total de descripteurs de fichiers utilisés par Apache est d'un par fichier journal, un pour chacune des autres directives de fichiers journaux, plus un nombre constant compris entre 10 et 20 - pour son fonctionnement interne. Les systèmes d'exploitation Unix + pour son fonctionnement interne. Les systèmes d'exploitation Unix limitent le nombre de descripteurs de fichiers utilisables par processus ; une valeur courante pour cette limite est de 64, et - cette valeur peut le plus souvent être augmentée.
+ cette valeur peut le plus souvent être augmentée. -Apache tente d'accroître cette valeur limite si nécessaire, mais +
Apache tente d'accroître cette valeur limite si nécessaire, mais sans y parvenir dans les cas suivants :
setrlimit().setrlimit().setrlimit(RLIMIT_NOFILE) ne fonctionne pas
- sur votre système d'exploitation (c'est le cas sous Solaris 2.3).En cas de problème, Vous pouvez :
+En cas de problème, Vous pouvez :
Lorsque vous choisissez d'enregistrer les informations émanant de -plusieurs serveurs virtuels dans un même fichier journal, vous voudrez -ensuite pouvoir scinder ces informations à des fins de statistiques, par -exemple, sur les différents serveurs virtuels. Il est possible de procéder -de la manière suivante :
+Lorsque vous choisissez d'enregistrer les informations émanant de +plusieurs serveurs virtuels dans un même fichier journal, vous voudrez +ensuite pouvoir scinder ces informations à des fins de statistiques, par +exemple, sur les différents serveurs virtuels. Il est possible de procéder +de la manière suivante :
-Tout d'abord, vous devez ajouter le nom du serveur virtuel à chaque -entrée du journal. Ceci se paramètre au moyen de la directive +
Tout d'abord, vous devez ajouter le nom du serveur virtuel à chaque
+entrée du journal. Ceci se paramètre au moyen de la directive
%v. Ajoutez cette variable au début de la chaîne
-de définition du format de journalisations :
%v. Ajoutez cette variable au début de la chaîne
+de définition du format de journalisations :
Cette configuration va provoquer la création d'un fichier de +
Cette configuration va provoquer la création d'un fichier de
journalisation au format standard (CLF : 'Common Log Format'), mais dont
-chaque ligne débutera par le nom canonique du serveur virtuel (spécifié
+chaque ligne débutera par le nom canonique du serveur virtuel (spécifié
par la directive
Au moment de séparer les informations du fichier journal en un fichier +
Au moment de séparer les informations du fichier journal en un fichier
par serveur virtuel, le programme
-split-logfile peut être
-utilisé. Ce programme peut être trouvé dans le répertoire
+split-logfile peut être
+utilisé. Ce programme peut être trouvé dans le répertoire
support de la distribution d'Apache.
Exécutez ce programme au moyen de la commande :
+Exécutez ce programme au moyen de la commande :
Une fois exécuté avec le nom du fichier contenant tous les journaux,
-ce programme va générer un fichier pour chacun des serveurs virtuels
-qui apparaît dans le fichier d'entrée. Chaque fichier en sortie est
-nommé nomduserveur.log.
Une fois exécuté avec le nom du fichier contenant tous les journaux,
+ce programme va générer un fichier pour chacun des serveurs virtuels
+qui apparaît dans le fichier d'entrée. Chaque fichier en sortie est
+nommé nomduserveur.log.
Le principe des Serveurs Virtuels consiste à +
Le principe des Serveurs Virtuels consiste Ã
faire fonctionner un ou plusieurs serveurs Web (comme
www.company1.example.com et www.company2.example.com)
- sur une même machine. Les serveurs virtuels peuvent être soit
- "par-IP" où une adresse IP est
- attribuée pour chaque serveur Web, soit "par-nom" où plusieurs noms de domaine se côtoient sur
- des mêmes adresses IP. L'utilisateur final ne perçoit pas
- qu'en fait il s'agit d'un même serveur physique.
Apache a été le précurseur des serveurs proposant cette - méthode de serveurs virtuels basés sur les adresses IP. Ses + sur une même machine. Les serveurs virtuels peuvent être soit + "par-IP" où une adresse IP est + attribuée pour chaque serveur Web, soit "par-nom" où plusieurs noms de domaine se côtoient sur + des mêmes adresses IP. L'utilisateur final ne perçoit pas + qu'en fait il s'agit d'un même serveur physique.
+ +Apache a été le précurseur des serveurs proposant cette + méthode de serveurs virtuels basés sur les adresses IP. Ses versions 1.1 et suivantes proposent les deux - méthodes de serveurs virtuels : par-IP et par-nom. Cette - deuxième méthode est parfois également appelée host-based + méthodes de serveurs virtuels : par-IP et par-nom. Cette + deuxième méthode est parfois également appelée host-based ou serveur virtuel non-IP.
Vous trouverez ci-dessous une liste documentaire qui vous - expliquera en détails le fonctionnement du support des serveurs + expliquera en détails le fonctionnement du support des serveurs virtuels par le serveur HTTP Apache.
Pour vérifier et analyser la configuration de vos serveurs +
Pour vérifier et analyser la configuration de vos serveurs
virtuels, vous pouvez utiliser l'argument -S sur
la ligne de commande.
Cette commande affichera dans le détail comment Apache a - traité son fichier de configuration. Les erreurs de configuration - peuvent être corrigées par l'examen attentif des adresses IP et +
Cette commande affichera dans le détail comment Apache a
+ traité son fichier de configuration. Les erreurs de configuration
+ peuvent être corrigées par l'examen attentif des adresses IP et
des noms de serveurs. (Consultez la documentation du programme
Comme l'indique le terme par IP, le serveur - doit disposer de différentes paires adresses IP/port pour chaque - serveur virtuel par IP. La machine peut posséder - plusieurs connexions physiques au réseau, ou utiliser des - interfaces virtuelles qui sont supportées par la plupart des - systèmes d'exploitation modernes (Consultez la documentation des - systèmes d'exploitation pour plus de détails, notamment les "alias + doit disposer de différentes paires adresses IP/port pour chaque + serveur virtuel par IP. La machine peut posséder + plusieurs connexions physiques au réseau, ou utiliser des + interfaces virtuelles qui sont supportées par la plupart des + systèmes d'exploitation modernes (Consultez la documentation des + systèmes d'exploitation pour plus de détails, notamment les "alias IP" et la commande "ifconfig" pour les activer), et/ou utiliser - plusieurs numéros de port.
+ plusieurs numéros de port.Selon la terminologie du serveur HTTP Apache, l'utilisation d'une - seule adresse IP avec plusieurs ports TCP s'apparente aussi à de - l'hébergement virtuel basé sur IP.
+ seule adresse IP avec plusieurs ports TCP s'apparente aussi à de + l'hébergement virtuel basé sur IP.Il y a deux manières de configurer Apache pour le support de +
Il y a deux manières de configurer Apache pour le support de
multiples serveurs virtuels. Il suffit soit de faire tourner un
- processus résident
Utilisez des processus résidents multiples lorsque :
+Utilisez des processus résidents multiples lorsque :
Utilisez un unique processus résident lorsque :
+Utilisez un unique processus résident lorsque :
Créez une installation indépendante du programme +
Créez une installation indépendante du programme
Il est recommandé d'utiliser une adresse IP plutôt qu'un nom
- de domaine (consultez Problèmes DNS
+ Il est recommandé d'utiliser une adresse IP plutôt qu'un nom
+ de domaine (consultez Problèmes DNS
avec Apache).
Dans ce cas, un unique processus httpd va gérer les requêtes +
Dans ce cas, un unique processus httpd va gérer les requêtes
pour le serveur principal et tous les serveurs virtuels. Dans le
fichier de configuration, la directive
-
Il est recommandé d'utiliser une adresse IP plutôt qu'un nom
- de domaine comme argument à la directive <VirtualHost>
- (consultez Problèmes DNS
+ Il est recommandé d'utiliser une adresse IP plutôt qu'un nom
+ de domaine comme argument à la directive <VirtualHost>
+ (consultez Problèmes DNS
avec Apache). Presque toutes les directives de configuration
- peuvent être employées dans une directive VirtualHost, à l'exception
- des directives qui contrôlent la création du processus et de
- quelques autres. Pour connaître celles utilisables dans une
- directive VirtualHost, vérifiez leur
+ peuvent être employées dans une directive VirtualHost, à l'exception
+ des directives qui contrôlent la création du processus et de
+ quelques autres. Pour connaître celles utilisables dans une
+ directive VirtualHost, vérifiez leur
Contexte en utilisant
l'Index des directives. SÉCURITÉ : lorsque vous spécifiez où écrire les
+ SÃCURITà : lorsque vous spécifiez où écrire les
fichiers journaux, soyez attentif aux risques si quelqu'un d'autre
- que celui qui a démarré Apache dispose des droits d'écriture
+ que celui qui a démarré Apache dispose des droits d'écriture
sur l'emplacement de ces fichiers. Consultez les
- Conseils sur la sécurité
- pour plus de détails.
Ce document décrit quand et comment utiliser des serveurs +
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.
+ 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 +
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.
+ 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, +
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, sauf dans le cas où vous utiliseriez des équipements qui - nécessitent un hébergement basé sur IP. Les raisons historiques de - l'hébergement basé sur IP dans un but de support de certains clients ne - s'appliquent plus à un serveur web d'usage général.
- -La sélection du serveur virtuel en fonction du nom s'opère en - dehors de l'algorithme de sélection du serveur virtuel en fonction + ces domaines. Il réduit aussi la pénurie en adresses IP. Par + conséquent, vous devriez utiliser l'hébergement virtuel par + nom, sauf dans le cas où vous utiliseriez des équipements qui + nécessitent un hébergement basé sur IP. Les raisons historiques de + l'hébergement basé sur IP dans un but de support de certains clients ne + s'appliquent plus à un serveur web d'usage général.
+ +La sélection du serveur virtuel en fonction du nom s'opère en + dehors de l'algorithme de sélection du serveur virtuel en fonction de l'adresse IP, ce qui signifie que les recherches du point de vue du nom du serveur ne s'effectuent que parmi le jeu de serveurs virtuels pour lesquels la correspondance avec la paire adresse @@ -69,42 +69,42 @@
Il est important de savoir que la première étape de la résolution - de serveur virtuel basée sur le nom est une résolution basée sur IP. - La résolution de serveur virtuel basée sur le nom ne fait que - choisir le serveur virtuel basé sur le nom le plus approprié, en se +
Il est important de savoir que la première étape de la résolution + de serveur virtuel basée sur le nom est une résolution basée sur IP. + La résolution de serveur virtuel basée sur le nom ne fait que + choisir le serveur virtuel basé sur le nom le plus approprié, en se limitant aux candidats qui conviennent le mieux du point de vue IP. - La résolution basée sur IP est sans objet si l'on - utilise un caractère générique (*) pour l'adresse IP dans + La résolution basée sur IP est sans objet si l'on + utilise un caractère générique (*) pour l'adresse IP dans toutes les directives VirtualHost.
-A l'arrivée d'une requête, le serveur va rechercher l'argument de +
A l'arrivée d'une requête, le serveur va rechercher l'argument de
section
Si vous ne définissez pas de directive
Si vous ne définissez pas de directive
Si aucune directive ServerName ou ServerAlias ne correspond dans - la liste de serveurs virtuels présentant la meilleure correspondance + la liste de serveurs virtuels présentant la meilleure correspondance du point de vue adresse IP/port, c'est le premier serveur - virtuel de cette liste qui sera utilisé.
La première étape consiste à créer une section +
La première étape consiste à créer une section
Toute requête qui ne correspond à aucune section
Toute requête qui ne correspond à aucune section
Lorsque vous ajoutez un serveur virtuel basé sur le nom à un - serveur existant, et si les caractéristiques de ce serveur - virtuel correspondent à des combinaisons IP/port préexistantes, - les requêtes seront alors traitées par un serveur virtuel - explicite. Dans ce cas, il est en général judicieux de créer un - serveur virtuel par défaut + est traitée avec la configuration du serveur principal, sans + tenir compte du nom d'hôte ou de la directive ServerName.
+ +Lorsque vous ajoutez un serveur virtuel basé sur le nom à un
+ serveur existant, et si les caractéristiques de ce serveur
+ virtuel correspondent à des combinaisons IP/port préexistantes,
+ les requêtes seront alors traitées par un serveur virtuel
+ explicite. Dans ce cas, il est en général judicieux de créer un
+ serveur virtuel par défaut
comportant une directive
Il est toujours préférable de définir une directive Il est toujours préférable de définir une directive
Par exemple, supposez que vous hébergez le domaine +
Par exemple, supposez que vous hébergez le domaine
www.example.com et que vous souhaitez ajouter le
serveur virtuel other.example.com qui pointe sur
- la même adresse IP. Il vous suffit d'ajouter la configuration
- suivante à httpd.conf :
httpd.conf :
Autrement, vous pouvez spécifiez une adresse IP explicite
- à la place de * dans la directive
+
Autrement, vous pouvez spécifiez une adresse IP explicite
+ Ã la place de * dans la directive
Plusieurs serveurs sont accessibles par plus d'un nom. Il
suffit de placer la directive
ainsi, toutes les requêtes portant sur un domaine +
ainsi, toutes les requêtes portant sur un domaine
example.com seront servies par le serveur virtuel
- www.example.com. Les caractères joker *
- et ? peuvent être utilisés pour les correspondances.
+ 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 ServerAlias. Tout d'abord, votre serveur DNS
- doit être correctement configuré pour lier ces noms à une
- adresse IP associée avec votre serveur.
La recherche du serveur virtuel à base de nom qui correspond au
- plus près à la requête s'effectue parmi les
La liste complète des noms dans la section
La liste complète des noms dans la section
Finalement, vous pouvez affiner la configuration des serveurs
- virtuels en plaçant d'autres directives à l'intérieur des sections
+ virtuels en plaçant d'autres directives à l'intérieur des sections