[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

Exemples d'hôtes virtuels pour des installations ordinaires

Configuration de base

Fonctionnalités additionnelles


Hôtes virtuels basés sur adresse IP

Configuration du serveur:

    ...
    Port 80
    DocumentRoot /www/domain
    ServerName www.domain.tld

    <VirtualHost 111.22.33.55>
    DocumentRoot /www/otherdomain
    ServerName www.otherdomain.tld
    ...
    </VirtualHost>
    
www.otherdomain.tld ne peut être atteint qu'à l'aide de l'adresse 111.22.33.55, alors que www.domain.tld ne peut être atteint qu'à l'aide de l'adresse 111.22.33.44 ( celle-ci représente notre serveur principal ).

Configuration du serveur:

    ...
    Port 80
    ServerName server.domain.tld
    
    <VirtualHost 111.22.33.44>
    DocumentRoot /www/domain
    ServerName www.domain.tld
    ...
    </VirtualHost>

    <VirtualHost 111.22.33.55>
    DocumentRoot /www/otherdomain
    ServerName www.otherdomain.tld
    ...
    </VirtualHost>

Le serveur principal ne recevra jamais de requêtes, car toutes les adresses IP de notre machine sont utilisées pour des hôtes virtuels définis sur adresse IP (seules des requêtes locales localhost peuvent atteindre le serveur principal).

Installation 3: La machine serveur dispose de deux adresses IP (111.22.33.44 et 111.22.33.55) auxquelles sont rattachés les noms server.domain.tld et www- cache.domain.tld . Le nom de l'hôte, www.domain.tld , est un alias (CNAME) pour server.domain.tld et représentera le serveur principal. www-cache.domain.tld devient le serveur d'écoute proxy sur le port 8080, alors que le serveur Web utilise le port par défaut 80.

Configuration du serveur :

     ... Port 80 
     Listen 111.22.33.44:80 
     Listen 111.22.33.55:8080 
     ServerName server.domain.tld 

     <VirtualHost 111.22.33.44:80> 
     DocumentRoot /www/domain 
     ServerName www.domain.tld 
     ... 
     </VirtualHost> 

     <VirtualHost 111.22.33.55:8080> 
     ServerName www-cache.domain.tld 
     ... 
     <Directory proxy:> 
     order deny,allow 
     deny from all 
     allow from 111.22.33 
     </Directory> 
     </VirtualHost> 

Le serveur principal ne peut jamais répondre à une requête, car toutes les adresses IP ( à part celles de localhost) de votre machine sont utilisées pour les hôtes virtuels basés sur les adresses IP. Le serveur web peut être seulement atteint sur la première adresse par le port 80 et le proxy sur la seconde adresse par le port 8080.


Hôtes virtuels nommés

Configuration du serveur:

     ... 
     Port 80 
     ServerName server.domain.tld 
     NameVirtualHost 111.22.33.44 

     <VirtualHost 111.22.33.44> 
     DocumentRoot /www/domain 
     ServerName www.domain.tld 
     ... 
     </VirtualHost> 
     <VirtualHost 111.22.33.44> 
     DocumentRoot /www/subdomain 
     ServerName www.sub.domain.tld ... 
     </VirtualHost> 

A part localhost , il n'y a pas de combinaison adresse/port non spécifiées, c'est la raison pour laquelle le serveur principal ne prend en compte que les requêtes de localhost. Comme www.domain.tld a la priorité, il peut être considéré comme le serveur primaire par défaut .

Configuration du serveur:

...
    Port 80
    ServerName www.domain.tld
    DocumentRoot /www/domain

    NameVirtualHost 111.22.33.55

    <VirtualHost 111.22.33.55>
    DocumentRoot /www/otherdomain
    ServerName www.otherdomain.tld
    ...
    </VirtualHost>
   
    <VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.sub.domain.tld
    ServerAlias *.sub.domain.tld
    ...
    </VirtualHost> 

Toute requête envoyée à une adresse autre que 111.22.33.55 sera prise en compte par le serveur principal. Une requête adressée à 111.22.33.55 mentionnant un champ d'en-tête Host: avec une valeur inconnue ou autre que le serveur principal sera prise en compte par www.otherdomain.tld.


Hôte virtuel basé à la fois sur le nom et sur l'adresse IP

Configuration du serveur:

    ...
    Port 80
    ServerName server.domain.tld

    NameVirtualHost 111.22.33.44

    <VirtualHost 111.22.33.44>
    DocumentRoot /www/domain
    ServerName www.domain.tld
    ...
    </VirtualHost>
   
    <VirtualHost 111.22.33.44>
    DocumentRoot /www/subdomain1
    ServerName www.sub1.domain.tld
    ...
    </VirtualHost> 
    
    <VirtualHost 111.22.33.44>
    DocumentRoot /www/subdomain2
    ServerName www.sub2.domain.tld
    ...
    </VirtualHost> 
 
    <VirtualHost 111.22.33.55>
    DocumentRoot /www/otherdomain1
    ServerName www.otherdomain1.tld
    ...
    </VirtualHost> 
    
    <VirtualHost 111.22.33.66>
    DocumentRoot /www/otherdomain2
    ServerName www.otherdomain2.tld
    ...
    </VirtualHost>


Hôte virtuel basé sur le port

Configuration du serveur:

    ...
    Listen 80
    Listen 8080
    ServerName www.domain.tld
    DocumentRoot /www/domain

    <VirtualHost 111.22.33.44:8080>
    DocumentRoot /www/domain2
    ...
    </VirtualHost>

Une requête adressée à www.domain.tld sur le port 80 est prise en compte par le serveur principal, et une requête adressée au port 8080 est prise en compte par l'hôte virtuel.


Utilisation des hôtes virtuels par _default_

Configuration du serveur:

    ...
    <VirtualHost _default_:*>
    DocumentRoot /www/default
    ...
    </VirtualHost>

Utiliser un tel serveur par défaut avec un tel metaport déroute effectivement toutes les requêtes allant au serveur principal. Un hôte virtuel par défaut ne prend jamais en compte une requête qui a été envoyée à un hôte virtuel défini sur une combinaison adresse/port, laquelle peut être associée à un hôtes virtuels nommé. Si le champ host: de la requête mentionne un hôte inconnu ou un autre hôte, celle-ci sera toujours prise en compte par le premier hôte virtuel nommé pour cette paire adresse/port (le premier hôte virtuel nommé qui apparait dans le fichier de configuration pour cette combinaison adresse/port). Vous pouvez utiliser AliasMatch ou RewriteRule pour réécrire toute requête visant une page d'information (ou script).

Configuration du serveur:

    ...
    <VirtualHost _default_:80>
    DocumentRoot /www/default80
    ...
    </VirtualHost>
    
    <VirtualHost _default_:*>
    DocumentRoot /www/default
    ...
    </VirtualHost>    

L'hôte virtuel par défaut pour le port 80 ( lequel doit apparaître avant tout hôte virtuel par défaut avec un metaport) prend en compte toutes les requêtes qui ont été envoyées à une adresse IP non spécifiée. Le serveur principal n'est jamais utilisé pour répondre à une requête.

Configuration du serveur:

    ...
    <VirtualHost _default_:80>
    DocumentRoot /www/default
    ...
    </VirtualHost>

Une requête envoyée à une adresse non spécifiée sur le port 80 est prise en charge par l' hôte virtuel par défaut. Toute autre requête envoyée à une adresse et unport non définis est prise en charge par le serveur principal.


Passage d'un hôte virtuel nommé à un hôte virtuel basé sur adresse IP

Configuration du serveur:

    ...
    Port 80
    ServerName www.domain.tld
    DocumentRoot /www/domain

    NameVirtualHost 111.22.33.55

    <VirtualHost 111.22.33.55 111.22.33.66>
    DocumentRoot /www/otherdomain
    ServerName www.otherdomain.tld
    ...
    </VirtualHost>
   
    <VirtualHost 111.22.33.55>
    DocumentRoot /www/subdomain
    ServerName www.sub.domain.tld
    ServerAlias *.sub.domain.tld
    ...
    </VirtualHost>

Vous pouvez maintenant accéder à l'hôte virtuel par la nouvelle adresse (comme un hôte virtuel basé sur adresse IP ) et par l'ancienne adresse (comme un hôte virtuel nommé).


Utilisation de la directive ServerPath

Configuration du serveur:

    
    ...
    NameVirtualHost 111.22.33.44

    <VirtualHost 111.22.33.44>
    # primary vhost
    DocumentRoot /www/subdomain
    RewriteEngine On
    RewriteRule ^/.* /www/subdomain/index.html
    ...
    </VirtualHost>

    <VirtualHost 111.22.33.44>
    DocumentRoot /www/subdomain/sub1
    ServerName www.sub1.domain.tld
    ServerPath /sub1/
    RewriteEngine On
    RewriteRule ^(/sub1/.*) /www/subdomain$1 
    ...
    </VirtualHost>

    <VirtualHost 111.22.33.44>
    DocumentRoot /www/subdomain/sub2
    ServerName www.sub2.domain.tld
    ServerPath /sub2/
    RewriteEngine On
    RewriteRule ^(/sub2/.*) /www/subdomain$1 
    ...
    </VirtualHost>

A cause de la directive ServerPath, un requête faite à l'URL http://www.sub1.domain.tld/sub1/ est toujours prise en charge par l' hôte virtuel sub1 ( sub1-vhost ). Une requête adressée à l ' URL http://www.sub1.domain.tld/ n'est prise en compte que par l'hôte virtuel sub1 si le client envoie un hôte virtuel correcte Host: header. S'il n'y a pas d'hôte virtuel Host: header is sent le client obtient la page d'information du premier hôte virtuel. Remarquez qu'il y a une bizzarerie: Une requête à l 'URL http://www.sub2.domain.tld/sub1/ est aussi prise en compte par l'hôte virtuel sub1-vhost si le client n'a pas envoyé d'hôte virtuel Host: header.
Les directives RewriteRule sont utilisée pour être sûr qu'un client qui a envoyé un hôte virtuel correcte Host: header, peut utiliser également les variantes d 'URL , c'est à dire avec ou sans préfixe d 'URL.


Apache HTTP Server Version 1.3

Index Home

Adaptation française : Yael Leblanc / Promo 2000
Sous la direction de : Valery Fremaux / EISTI 1998