Serveur Apache HTTP Version 2.2

Ce document concerne une version ancienne (2.2) du serveur HTTP Apache. La version actuelle est documentée ici. Si vous n'avez pas encore effectué la mise è jour, veuillez suivre ce lien pour plus d'informations.
Pour consulter la version actuelle de ce document, vous pouvez suivre ce lien.
Ce document décrit quand et comment utiliser des serveurs virtuels par nom.
 Serveurs virtuels par nom vs. par IP
 Utilisation de serveurs virtuels par nom
 Compatibilité avec les navigateurs anciensLes hébergements 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'appuit 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, 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, sauf si vous
    utilisez une version de mod_ssl sans support SNI
    (situation  standard depuis la version 2.2.12 d'Apache).
| 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 pour des domaines. 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 devriez 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.
La liste complète des noms dans la section VirtualHost sont traités comme une
    directive ServerAlias sans
    caractères génériques.
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
    souhaitez 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.
Comme mentionné plus tôt, certains clients ne transmettent pas les données nécessaires pour le bon fonctionnement des serveurs virtuels par nom. Ces clients recevront toujours les pages du premier serveur virtuel listé pour cette adresse IP (le serveur virtuel par nom primaire).
Veuillez noter que quand nous disons plus anciens, nous
    disons vraiment plus anciens. Vous avez peu de chances de rencontrer
    de tels navigateurs encore utilisés de nos jours. Toutes les
    versions actuelles des navigateurs transmettent leur en-tête
    Host comme exigé par les serveurs virtuels par nom.
Il existe une solution avec la directive
    ServerPath, bien que
    légèrement complexe :
Exemple de configuration :
        NameVirtualHost 111.22.33.44
        
        <VirtualHost 111.22.33.44>
        
            ServerName www.domain.tld
            ServerPath /domain
            DocumentRoot /web/domain
        
        </VirtualHost>
    
Qu'est-ce que cela signifie ? Il signifie qu'une requête
    pour tout URI qui commence par "/domain" sera
    servie par le serveur virtuel www.domain.tld.
    Ainsi, les pages sont accessibles à
    http://www.domain.tld/domain/ pour tous les
    clients, bien que ceux qui transmettent un en-tête
    Host: peuvent également y accéder à
    http://www.domain.tld/.
Pour rendre cette technique fonctionnelle, mettez un lien
    dans votre serveur virtuel primaire vers
    http://www.domain.tld/domain/. Ensuite, dans les
    pages de ce serveur virtuel, assurez vous de n'utiliser que
    des liens relatifs (par exemple, "file.html"
    ou "../icons/image.gif") ou des liens contenant
    le préfixe /domain/ (par exemple,
    "http://www.domain.tld/domain/misc/file.html"
    ou "/domain/misc/file.html").
Cela requiert un peu de discipline, mais si vous suivez cette ligne de conduite, vous serez assuré que vos pages s'afficheront dans tous les navigateurs, nouveaux et anciens.