En plus des réponses données ici (notamment celle de @Jason Blevins), il y a un piège potentiel ici. Il m'a fallu un certain temps pour le découvrir.
Comme indiqué, Apache utilisera l'option premièrement VirtualHost si aucune autre entrée ne correspond à l'un ou l'autre des critères suivants HostName
ou HostAlias
directive.
Cependant, faites attention lorsque vous mélangez des hôtes virtuels qui sont liés à une adresse IP spécifique et d'autres qui ne le sont pas ( <VirtualHost 192.168.1.1:80>
vs. <VirtualHost *:80>
).
Si une demande est faite à une adresse IP qui a un ou plusieurs hôtes virtuels liés à l'IP, elle utilisera la première entrée VirtualHost. lié à cette adresse même si c'est pas le premier . En d'autres termes, les correspondances plus spécifiques sont préférées à celles qui ne le sont pas pour la correspondance d'adresse IP, également.
Exemple
<VirtualHost *>
DocumentRoot /www/docs/domain1
ServerName host1.exmple.com
ServerAlias host
</VirtualHost>
<VirtualHost 192.168.1.1>
DocumentRoot /www/docs/domain2
ServerName host2.exmple.com
ServerAlias host
</VirtualHost>
Si une demande est faite à l'hôte foobar.example.com
et qui se résout à 192.168.1.1, Apache servira à partir de /www/docs/domaine2, ce qui peut être inattendu.
Pour résoudre ce problème, soit...
- rendre tous les hôtes virtuels indépendants de l'IP (
<VirtualHost *>
), ou
- ajouter une entrée VirtualHost par défaut distincte pour chaque adresse IP desservie.
En cas de doute, lancez apachectl -S
(ou toute autre commande appropriée sur votre système) pour obtenir une liste de VirtualHosts. Elle vous indiquera celui qui est utilisé par défaut.