Les hôtes virtuels permettent de configurer plusieurs domaines sur un unique serveur du réseau. On économise ainsi les coûts et le travail d'administration nécessaires à l'installation d'un serveur par domaine. Il existe plusieurs possibilités pour les hôtes virtuels :
les hôtes virtuels basés sur le nom
les hôtes virtuels basés sur l'adresse IP
Faire fonctionner plusieurs instances d'Apache sur un seul ordinateur.
Plusieurs domaines peuvent être gérés par une seule instance d'Apache par le biais des hôtes virtuels basés sur le nom. Il n'est alors pas nécessaire de configurer plusieurs adresses IP pour un ordinateur. Il s'agit de l'alternative la plus simple et la plus populaire. Des raisons pour ne pas utiliser d'hôtes virtuels basés sur le nom sont disponibles dans la documentation d'Apache.
Vous pouvez configurer ce point directement dans le fichier de
configuration /etc/apache2/httpd.conf. Pour activer
des hôtes virtuels basés sur nom, il faut indiquer une directive adéquate.
NameVirtualHost ** est suffisante
pour qu'Apache accepte toutes les requêtes entrantes. Vous devez ensuite
configurer chaque hôte virtuel :
<VirtualHost *>
ServerName www.exemple.com
DocumentRoot /srv/www/htdocs/exemple.com
ServerAdmin webmaster@exemple.com
ErrorLog /var/log/apache2/www.exemple.com-error_log
CustomLog /var/log/apache2/www.exemple.com-access_log common
</VirtualHost>
<VirtualHost *>
ServerName www.monautreentreprise.fr
DocumentRoot /srv/www/htdocs/monautreentreprise.fr
ServerAdmin webmaster@monautreentreprise.fr
ErrorLog /var/log/apache2/www.monautreentreprise.fr-error_log
CustomLog /var/log/apache2/www.monautreentreprise.fr-access_log common
</VirtualHost>
Une déclaration VirtualHost d'hôte virtuel doit
également être configurée pour le domaine hébergé par le serveur à
l'origine (www.exemple.com). Dans cet exemple, le domaine
initial et un domaine additionnel (www.monautreentreprise.fr) sont hébergés sur le même
serveur.
Dans les directives VirtualHost, on trouve un *,
tout comme pour NameVirtualHost. Apache établit le
rapport entre la demande et l'hôte virtuel par le champ d'hôte dans
l'en-tête HTTP. La demande est transmise à l'hôte virtuel, dont le
ServerName (nom de serveur) correspond au nom de
l'hôte indiqué dans ce champ.
Dans les directives ErrorLog et
CustomLog, il n'est pas crucial que fichiers contiennent
le nom du domaine ; on peut utiliser des noms quelconques.
Serveradmin désigne l'adresse e-mail de la
personne responsable du serveur que l'on peut contacter en cas de
problèmes. Si des erreurs se produisent, Apache indique cette adresse dans
les messages d'erreur qu'il restitue au client.
Cette alternative nécessite de configurer plusieurs adresses IP sur
l'ordinateur. Une instance d'Apache commande ensuite plusieurs domaines,
chaque domaine se voyant attribuer une adresse IP. L'exemple qui suit
montre comment configurer Apache afin qu'il héberge, outre sur son adresse
IP d'origine 192.168.1.10, deux
autres domaines sur des adresses IP supplémentaires (192.168.1.20 et 192.168.1.21). Cet exemple concret ne
fonctionne bien sûr que dans un intranet, puisque les adresses IP allant de
192.168.0.0 à 192.168.255.0 ne sont pas routées sur
l'Internet.
Pour qu'Apache puisse héberger plusieurs adresses IP, l'ordinateur sur lequel Apache fonctionne doit accepter les demandes pour plusieurs adresses IP, ce qu'on appelle le Multi-IP-Hosting. Cela nécessite d'abord que les alias IP soient activés dans le noyau, ce qui est le cas par défaut sous SUSE LINUX.
Une fois que le noyau est configuré pour prendre en charge les
alias IP, on peut affecter plusieurs adresses IP à l'ordinateur en
utilisant les commandes ifconfig et
route. Ces commandes doivent être exécutées en tant
qu'utilisateur root. On suppose,
dans l'exemple suivant, que l'ordinateur dispose déjà de sa propre adresse
IP, 192.168.1.10 étant
attribuée au périphérique réseau eth0.
On peut voir quelle adresse IP est utilisée par l'ordinateur en saisissant la commande ifconfig. Pour ajouter d'autres adresses IP, utilisez la commande suivante :
ip addr add 192.168.1.20/24 dev eth0
Toutes ces adresses IP sont attribuées au même périphérique
réseau physique (eth0).
Lorsque les alias IP ont été configurés sur le système ou bien
que l'ordinateur a été configuré avec plusieurs cartes réseau, on peut
procéder à la configuration d'Apache. Indiquez pour chaque serveur virtuel
son propre bloc VirtualHost :
<VirtualHost 192.168.1.20>
ServerName www.monautreentreprise.fr
DocumentRoot /srv/www/htdocs/monautreentreprise.fr
ServerAdmin webmaster@monautreentreprise.fr
ErrorLog /var/log/apache2/www.monautreentreprise.fr-error_log
CustomLog /var/log/apache2/www.monautreentreprise.fr-access_log common
</VirtualHost>
<VirtualHost 192.168.1.21>
ServerName www.encoreuneentreprise.fr
DocumentRoot /srv/www/htdocs/encoreuneentreprise.fr
ServerAdmin webmaster@encoreuneentreprise.fr
ErrorLog /var/log/apache2/www.encoreuneentreprise.fr-error_log
CustomLog /var/log/apache2/www.encoreuneentreprise.fr-access_log common
</VirtualHost>
On n'indique ici les directives VirtualHost
que pour les domaines supplémentaires ; le domaine initial (www.exemple.com) est toujours configuré par les réglages
correspondants (DocumentRoot etc.) en dehors des blocs
VirtualHost.
Avec les méthodes précédentes de gestion des hôtes virtuels, les
administrateurs d'un domaine peuvent lire les données contenues des autres
domaines. Pour séparer les différents domaines les uns des autres, on peut
lancer plusieurs instances d'Apache qui utilisent chacune dans le fichier
de configuration leurs propres réglages pour User,
Group etc..
Indiquez dans le fichier de configuration pour la directive
Listen l'adresse IP gérée par l'instance d'Apache
correspondante. Comme dans l'exemple précédent, la directive pour la
première instance d'Apache serait :
Listen 192.168.1.10:80
Pour les deux autres instances, elle serait :
Listen 192.168.1.20:80 Listen 192.168.1.21:80