Serveur HTTP Apache Version 2.4

Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

# Module Apache mod_vhost_alias

Description: | Permet de configurer dynamiquement l'hébergement virtuel de masse
Statut: | Extension
Identificateur de Module: | vhost_alias_module
Fichier Source: | mod_vhost_alias.c

### Sommaire

Ce module permet de créer des serveurs virtuels configurés dynamiquement, en autorisant l'utilisation de l'adresse IP et/ou de l'en-tête `Host:` de la requête HTTP comme partie du nom de chemin afin de déterminer les fichiers à servir. Ceci facilite la gestion d'un grand nombre de serveurs virtuels possèdant des configurations similaires.

### Note

Si les modules `mod_alias` ou `mod_userdir` sont utilisés pour traduire les URIs en noms de fichiers, ils l'emportent sur les directives du module `mod_vhost_alias` décrites ci-dessous. Par exemple, la configuration suivante fera correspondre `/cgi-bin/script.pl` à `/usr/local/apache2/cgi-bin/script.pl` dans tous les cas :

    ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"
    VirtualScriptAlias "/never/found/%0/cgi-bin/"

### Sujets

- Interpolation du nom de répertoire
- Exemples

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

### Voir aussi

- `UseCanonicalName`
- Configuration dynamique de l'hébergement virtuel de masse

## Interpolation du nom de répertoire

Toutes les directives de ce module insèrent une chaîne dans un nom de chemin. La chaîne insérée (que nous appellerons maintenant le "nom") peut être soit le nom du serveur (voir la directive `UseCanonicalName` pour les détails sur la manière dont il est déterminé), soit l'adresse IP du serveur virtuel hébergé par le serveur sous la forme d'un quadruplet d'octets séparés par des points. L'insertion est contrôlée par des spécificateurs inspirés de `printf` et possèdant de nombreux formats :

`%%` | insère un `%`
`%p` | insère le numéro de port du serveur virtuel
`%N.M` | insère le nom (en partie)

`N` et `M` permettent de spécifier des sous-chaînes du nom. `N` sélectionne un des composants du nom séparés par des points, et `M` sélectionne des caractères à l'intérieur de ce que `N` a sélectionné. `M` est optionnel et sa valeur par défaut est 0 s'il n'est pas spécifié ; le point doit être présent si et seulement si `M` l'est aussi. Les modes d'insertion sont les suivants :

`0` | le nom en entier
`1` | la première partie
`2` | la seconde partie
`-1` | la dernière partie
`-2` | l'avant-dernière partie
`2+` | toutes les parties à partir de la seconde
`-2+` | toutes les parties jusqu'à l'avant-dernière
`1+` et `-1+` | identique à `0`

Si `N` ou `M` est plus grand que le nombre de parties disponibles, seul un caractère de soulignement est inséré.

## Exemples

Pour des serveurs virtuels simples à base de nom, utilisez les directives suivantes dans le fichier de configuration de votre serveur :

    UseCanonicalName    Off
    VirtualDocumentRoot "/usr/local/apache/vhosts/%0"

Une requête pour `http://www.example.com/repertoire/fichier.html` concernera alors la ressource `/usr/local/apache/vhosts/www.example.com/repertoire/fichier.html`.

Pour un très grand nombre de serveurs virtuels, il est avantageux d'organiser les fichiers de façon à réduire la taille du répertoire `vhosts`. Pour ce faire, insérez les lignes suivantes dans votre fichier de configuration :

    UseCanonicalName    Off
    VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2"

Une requête pour `http://www.domaine.example.com/repertoire/fichier.html` concernera alors la ressource `/usr/local/apache/vhosts/example.com/d/o/m/domaine/repertoire/fichier.html`.

Une répartition plus régulière des fichiers peut être obtenue en partant de la fin d'un composant du nom, comme dans l'exemple suivant :

    VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2"

La requête précédente concernerait alors `/usr/local/apache/vhosts/example.com/e/n/i/domaine/repertoire/fichier.html`.

Vous pouvez également utiliser :

    VirtualDocumentRoot "/usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+"

La requête précédente concernerait alors `/usr/local/apache/vhosts/example.com/d/o/m/aine/repertoire/fichier.html`.

Une demande très courante des utilisateurs concerne la possibilité de faire correspondre plusieurs racines de documents à plusieurs domaines, sans avoir à se préoccuper de la longueur ou du nombre de parties du nom d'hôte faisant partie de la requête. Si le nom d'hôte de la requête est `sub.www.domain.example.com` au lieu de simplement `www.domain.example.com`, alors en utilisant %3+, la racine des documents sera `/usr/local/apache/vhosts/domain.example.com/...` au lieu du répertoire `example.com` attendu. Dans ce genre de situation, il peut s'avérer préférable d'utiliser la combinaison `%-2.0.%-1.0` qui fournira toujours le nom de domaine et le tld, par exemple `example.com` sans tenir compte du nombre de sous-domaines ajoutés au nom d'hôte. Dans ces conditions, il est possible d'élaborer une configuration qui associera les sous-domaines de premier, second et troisième niveau au même répertoire :

    VirtualDocumentRoot "/usr/local/apache/vhosts/%-2.0.%-1.0"

Dans l'exemple ci-dessus, `www.example.com`, `www.sub.example.com` ou `example.com` correspondront tous au répertoire `/usr/local/apache/vhosts/example.com`.

Pour l'hébergement virtuel à base d'adresse IP, vous pouvez insérer les lignes suivantes dans votre fichier de configuration :

    UseCanonicalName DNS
    VirtualDocumentRootIP "/usr/local/apache/vhosts/%1/%2/%3/%4/docs"
    VirtualScriptAliasIP  "/usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin"

Si l'adresse IP de `www.domaine.example.com` est 10.20.30.40, une requête pour `http://www.domaine.example.com/repertoire/fichier.html` concernera la ressource `/usr/local/apache/vhosts/10/20/30/40/docs/repertoire/fichier.html`. Une requête pour `http://www.domaine.example.com/cgi-bin/script.pl` concernera la ressource `/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl`.

Si vous voulez insérer le caractère `.` dans une directive `VirtualDocumentRoot`, et si cela crée un conflit avec un spécificateur `%`, vous pouvez contourner le problème de la manière suivante :

    VirtualDocumentRoot "/usr/local/apache/vhosts/%2.0.%3.0"

Une requête pour `http://www.domaine.example.com/repertoire/fichier.html` concernera alors la ressource `/usr/local/apache/vhosts/domaine.exemple/repertoire/fichier.html`.

Les spécificateurs de format `%V` et `%A` de la directive `LogFormat` s'avèrent très utiles lorsqu'ils sont utilisés en conjonction avec ce module.

## Directive VirtualDocumentRoot

Description: | Permet une configuration dynamique de la racine des documents d'un serveur virtuel donné
Syntaxe: | `VirtualDocumentRoot répertoire-interpolé|none`
Défaut: | `VirtualDocumentRoot none`
Contexte: | configuration globale, serveur virtuel
Statut: | Extension
Module: | mod_vhost_alias

La directive `VirtualDocumentRoot` vous permet de spécifier où le serveur HTTP Apache pourra trouver vos documents en se basant sur le nom du serveur. Le résultat de l'expansion du répertoire-interpolé est utilisé comme racine de l'arborescence des documents d'une manière similaire à l'argument de la directive `DocumentRoot`. Si répertoire-interpolé a pour valeur `none`, la directive `VirtualDocumentRoot` est désactivée. Cette directive ne peut pas être utilisée dans le même contexte que la directive `VirtualDocumentRootIP`.

### Note

La directive `VirtualDocumentRoot` l'emporte sur toute directive `DocumentRoot` définie dans le même contexte ou dans des contextes enfants. Le fait de définir une directive `VirtualDocumentRoot` dans le contexte du serveur principal va effectivement l'emporter sur toute directive `DocumentRoot` définie dans un serveur virtuel quelconque, si vous n'avez pas défini `VirtualDocumentRoot` à `None` dans ce serveur virtuel.

## Directive VirtualDocumentRootIP

Description: | Configuration dynamique de la racine des documents pour un serveur virtuel donné
Syntaxe: | `VirtualDocumentRootIP répertoire-interpolé|none`
Défaut: | `VirtualDocumentRootIP none`
Contexte: | configuration globale, serveur virtuel
Statut: | Extension
Module: | mod_vhost_alias

La directive `VirtualDocumentRootIP` est identique à la directive `VirtualDocumentRoot` à l'exception près qu'elle utilise l'adresse IP du serveur virtuel pour l'interpolation du répertoire à la place du nom du serveur.

## Directive VirtualScriptAlias

Description: | Configuration dynamique du répertoire des scripts CGI pour un serveur virtuel donné
Syntaxe: | `VirtualScriptAlias répertoire-interpolé|none`
Défaut: | `VirtualScriptAlias none`
Contexte: | configuration globale, serveur virtuel
Statut: | Extension
Module: | mod_vhost_alias

La directive `VirtualScriptAlias` vous permet de spécifier où Apache httpd pourra trouver les scripts CGI selon une méthode similaire à celle qu'utilise la directive `VirtualDocumentRoot` pour les autres documents. Elle recherche des requêtes dont l'URI commence par `/cgi-bin/`, comme le ferait la directive `ScriptAlias`.

## Directive VirtualScriptAliasIP

Description: | Configuration dynamique du répertoire des scripts CGI pour un serveur virtuel donné
Syntaxe: | `VirtualScriptAliasIP répertoire-interpolé|none`
Défaut: | `VirtualScriptAliasIP none`
Contexte: | configuration globale, serveur virtuel
Statut: | Extension
Module: | mod_vhost_alias

La directive `VirtualScriptAliasIP` est identique à la directive `VirtualScriptAlias` à l'exception près qu'elle utilise l'adresse IP du serveur virtuel pour l'interpolation du répertoire à la place du nom du serveur.