La solution se trouve dans la documentation d'Apache 2.2 sur la directive Virtualhost :
Syntaxe : ... [...] L'adresse peut être :
- L'adresse IP de l'hôte virtuel ;
- Un nom de domaine entièrement qualifié pour l'adresse IP de l'hôte virtuel (non recommandé) ;
- Le personnage * qui n'est utilisé qu'en combinaison avec NomHôte virtuel * pour correspondre à toutes les adresses IP ; ou
- La chaîne de caractères _default_ qui n'est utilisé qu'avec Hébergement virtuel IP pour attraper les adresses IP qui ne correspondent pas.
Il existe deux façons de gérer les hôtes virtuels : l'hébergement virtuel basé sur le nom et l'hébergement virtuel basé sur l'IP.
Avec les serveurs virtuels basés sur les noms, vous disposez d'une liste de serveurs virtuels, chacun gérant un ou plusieurs noms de domaine, et chacun associé à un couple listening IP:port
. *
est une valeur spéciale qui signifie toutes les IP de cet hôte . L'hôte virtuel par défaut est le premier déclaré dans cette liste pour chaque adresse d'écoute donnée.
Avec les hôtes virtuels basés sur l'IP, le ServerName
de l'hôte virtuel n'est pas utilisée, l'information importante est l'IP d'écoute (et le port), et l'hôte virtuel par défaut est le premier qui correspond à l'IP traitant la requête entrante.
Donc avec une configuration d'hébergement virtuel basée sur un nom :
- *`<Virtualhost :80> with ServerName foo.com`** signifie "sur toutes les IP gérées par cet hôte", "sur le port 80", "si l'en-tête de la requête est foo.com" J'utiliserai ce serveur virtuel
<Virtualhost *:*> with Servername foo.com
signifie "sur toutes les IP gérées sur cet hôte", "sur tous les ports", "si l'en-tête de la requête est foo.com" J'utiliserai cet hôte virtuel
- *`<Virtualhost 10.0.0.2:> with Servername foo.com`** signifie "pour les requêtes provenant de mon interface réseau 10.0.0.2", "sur tous les ports", "si l'en-tête de l'hôte de la requête est foo.com" J'utiliserai ce serveur virtuel
- *`<Virtualhost default:> with Servername foo.com`** Le système d'hébergement virtuel basé sur le nom ne doit pas être utilisé.
Et sur un hébergement virtuel basé sur l'IP :
- *`<Virtualhost 10.0.0.2:>`** signifie "J'utiliserai ce serveur virtuel pour les requêtes provenant de mon interface 10.0.0.2".
<Virtualhost _default_:443>
signifie "J'utiliserai ce serveur virtuel pour toutes les autres interfaces réseau de mon hôte pour les requêtes provenant du port 443".
- *`<Virtualhost default:>`** signifie "J'utiliserai ce serveur virtuel pour toutes les autres interfaces réseau de mon hôte, s'il ne correspond pas à une règle précédente et si l'en-tête de la requête ne correspond pas à un serveur virtuel nommé".
Il s'agit donc de définir un hôte virtuel fourre-tout. La documentation ajoute :
Lors de l'utilisation d'un hébergement virtuel basé sur l'IP, le nom spécial _default_
peut être spécifié, auquel cas cet hôte virtuel correspondra à toute adresse IP qui n'est pas explicitement répertoriée dans un autre hôte virtuel. En l'absence de _default_
virtual host la configuration "principale" du serveur, composée de toutes les définitions en dehors de toute section VirtualHost, est utilisée lorsqu'il n'y a pas de correspondance d'IP. (Notez toutefois que toute adresse IP correspondant à une directive NameVirtualHost n'utilisera ni la configuration de serveur "principale", ni la configuration de serveur "virtuelle". _default_
hôte virtuel. Pour plus de détails, voir la documentation sur l'hébergement virtuel par nom).
Après toutes ces considérations, il apparaît donc assez clairement que le mélange de l'hébergement virtuel basé sur l'IP et de l'hébergement virtuel basé sur le nom pourrait devenir un véritable gâchis. Avec Apache 2.2, l'hébergement virtuel par nom n'était utilisé que dans les cas suivants NameVirtualhost <something>
a été utilisé.
Mais avec le nouveau Apache 2.4 version Ces choses sont vraiment plus faciles à comprendre, non ? NameVirtualhost
déclaration. La directive NameVirtualHost n'a plus d'effet, si ce n'est d'émettre un avertissement. Toute combinaison adresse/port apparaissant dans plusieurs hôtes virtuels est implicitement traitée comme un hôte virtuel basé sur un nom. . Finies les réflexions complexes, même la documentation est désormais plus simple :
- Le caractère *, qui agit comme un joker et correspond à n'importe quelle adresse IP.
- La chaîne
_default_
qui est un alias de *
Avec Apache 2.4, la réponse est donc la suivante, c'est la même chose .