Recherche de site Web

Explication de l’adresse IP Apache et des hôtes virtuels basés sur le nom


Avec l’utilisation d’hôtes virtuels, nous pouvons faire en sorte qu’un serveur httpd gère plusieurs sites Web. Nous pouvons utiliser à la fois des hôtes virtuels basés sur l’IP et le nom ; Quelles sont les différences entre eux ?

Comment Apache décide-t-il quels hôtes virtuels doivent être utilisés
pour répondre à une demande client ? Nous répondrons à ces questions dans cet article
, continuez à lire !

Dans ce tutoriel, vous allez apprendre :

  • Quelles sont les différences entre les hôtes virtuels basés sur l’adresse IP et le nom ?
  • Qu’est-ce que la directive Listen et comment est-elle utilisée ?
  • Comment Apache décide quel hôte virtuel doit être utilisé pour répondre à une requête

Explication de l’adresse IP Apache et des hôtes virtuels basés sur le nom

Configuration logicielle requise et conventions utilisées

La directive « Listen »

La première chose à prendre en considération est la directive Listen. Cette directive est obligatoire, et est nécessaire pour indiquer au serveur httpd à quelle combinaison IP-PORT il doit écouter les requêtes. Par défaut, le serveur est généralement configuré pour écouter toutes les adresses IP du port 80.

Dans /etc/httpd/conf/httpd.conf qui est le principal fichier de configuration httpd sur les systèmes Fedora/RHEL/CentOS, à la ligne 45, par exemple, on peut lire :

Listen 80

Comme vous pouvez le voir, seul le port est spécifié avec la directive Listen. Par conséquent, le serveur écoutera sur ce port toutes les adresses IP de la machine. Si une adresse est spécifiée, le serveur n’écoutera que sur la combinaison IP :PORT fournie.

La directive Listen peut être répétée plusieurs fois, il est donc très facile de spécifier plusieurs combinaisons.

Correspondance VirtualHost

Une fois que le serveur est configuré pour écouter une adresse ou un port spécifique, Apache doit décider quel VirtualHost doit être utilisé pour répondre à la demande du client. Avant de voir les étapes de cette décision, voyons brièvement comment un hôte virtuel est défini.

La directive utilisée pour créer et configurer l’hôte virtuel est VirtualHost ; Il utilise la syntaxe suivante :

<VirtualHost addr[:port] [addr[:port]] ...>
...
</VirtualHost>

Comme nous pouvons l’observer, chaque directive VirtualHost a besoin d’un addr ; Il peut être spécifié comme suit :

  • Une adresse IP, IPv4 ou IPv6 (les adresses IPv6 doivent être placées entre crochets) ;
  • Un nom de domaine complet ;
  • Un caractère générique * (cela correspondra à toutes les adresses)

Tous les paramètres et configurations effectués à l’intérieur des balises <VirtualHost></VirtualHost> sont « locaux » pour cet hôte virtuel spécifique. Voici un exemple de configuration d’hôte virtuel :

<VirtualHost 93.184.216.34:80>
  ServerName: www.exampleone.com
  DocumentRoot "/var/www/exampleone"
</VirtualHost>

Ou, à l’aide d’un caractère générique :

<VirtualHost *:80>
  ServerName: www.exampleone.com
  DocumentRoot "/var/www/exampleone"
</VirtualHost>

La première chose que fait le serveur est d’analyser, dans l’ordre, chaque hôte virtuel, et de vérifier si leur addr correspond à la requête. Il est important de noter que les adresses IP définies ont la priorité sur les caractères génériques, qui ne sont pris en compte que si aucune correspondance exacte n’est trouvée. À ce stade, nous pouvons avoir trois cas :

  1. Un seul hôte virtuel correspond à la demande ;
  2. Aucun hôte virtuel ne correspond à la demande ;
  3. Plusieurs hôtes virtuels correspondent à la demande ;

La première résolution de cas est simple : si la requête du client ne correspond qu’à un seul hôte virtuel spécifique, le serveur httpd répond en diffusant le contenu lié à cet hôte virtuel. Dans ce cas, on parle d’hôtes virtuels basés sur IP.

Le deuxième cas s’explique aussi facilement : si aucune configuration d’hôte virtuel ne satisfait la requête du client, la configuration par défaut du serveur est utilisée pour répondre à la requête. Pour la configuration par défaut, nous prévoyons que tout est défini en dehors de <VirtualHost></VirtualHost>.

Dans le troisième cas, plusieurs hôtes virtuels correspondent à la demande du client. Lorsque cela se produit, le serveur doit faire une discrimination en fonction d’un autre facteur que la combinaison IP :PORT : le schéma et le nom d’hôte que l’hôte virtuel utilise pour s’identifier.

Hôtes virtuels basés sur le nom

Le serveur examine chaque hôte virtuel correspondant dans l’ordre de définition et sélectionne celui qui doit être utilisé en fonction du nom d’hôte demandé. C’est ce qu’on appelle les hôtes virtuels « basés sur le nom ». Le premier hôte virtuel correspondant à la demande est utilisé. S’il n’y a aucune correspondance, le serveur utilise le premier VirtualHost défini comme solution de secours.

Le principal avantage de l’utilisation d’hôtes virtuels basés sur le nom est que nous pouvons exécuter plusieurs sites Web sur la même adresse IP. Voyons un exemple d’un VirtualHost basé sur le nom :

<VirtualHost *:80>
  ServerName www.serverone.com
  DocumentRoot /var/www/serverone
</VirtualHost>

Comme * :80 est utilisé comme adresse, l’hôte virtuel correspondra à chaque requête effectuée sur le port 80. Ce qui fait la différence dans ce cas, c’est la directive ServerName. Si cette directive est omise, le serveur essaiera d’obtenir un nom de domaine complet (FQDN) basé sur le nom d’hôte du système d’exploitation.

Le serveur vérifie si le nom d’hôte spécifié dans la requête correspond à celui configuré via la directive ServerName, dans ce cas www.serverone.com. Si c’est le cas, le contenu spécifié avec la directive DocumentRoot est servi au client.

Dans une configuration d’hôte virtuel, il est également possible de définir un ou plusieurs alias, pour correspondre à plusieurs noms d’hôte. Pour ce faire, utilisez la directive ServerAlias :

<VirtualHost *:80>
  ServerName www.serverone.com
  ServerAlias *.serverone.com
  DocumentRoot /var/www/serverone
</VirtualHost>

Dans la configuration ci-dessus, nous avons ajouté une instruction ServerAlias à l’aide d’un caractère générique. La configuration correspondra désormais également à chaque sous-domaine de serverone.com.

Hôtes virtuels basés sur IP

Les hôtes virtuels basés sur IP, comme nous l’avons déjà vu, sont essentiellement ce que le serveur httpd utilise par défaut. Lors de leur utilisation, la possibilité de servir plusieurs sites Web est basée sur la combinaison IP :PORT de la demande du client.

Il se passe que, pour utiliser ce type d’hôtes virtuels, une machine doit avoir plusieurs adresses réseau. Cela ne signifie pas que plusieurs interfaces réseau physiques sont nécessaires, car plusieurs adresses peuvent être attribuées à la même interface (c’est ce qu’on appelle l’aliasing IP), et des interfaces virtuelles peuvent également être créées (vous voulez savoir comment créer une interface réseau virtuelle sous Linux ?

Jetez un coup d’œil à notre article sur la création d’interfaces réseau virtuelles sous Linux. Voici deux exemples d’hôtes virtuels basés sur IP :

Listen 8080

<VirtualHost 93.184.216.34:80>
  ServerName: www.exampleone.com
  DocumentRoot "/var/www/exampleone"
</VirtualHost>

<VirtualHost 93.187.216.34:8080>
  ServerName www.exampletwo.com
  DocumentRoot "/var/www/exampletwo"
</VirtualHost>

Ci-dessus, nous pouvons voir que même si les deux hôtes virtuels ont la même adresse IP, un port différent est spécifié dans le deuxième exemple : 8080. Pour que le serveur puisse écouter ce port, nous utilisons la directive Listen 8080.

Conclusion

Dans ce tutoriel, nous avons vu comment fonctionnent les hôtes virtuels Apache. Nous avons appris la différence entre les hôtes virtuels basés sur l’adresse IP et le nom, et comment le serveur détermine la configuration à utiliser pour répondre à une demande client. S’il vous plaît, jetez un coup d’œil à l’article sur l’installation d’Apache si vous voulez en savoir plus sur la configuration d’un hôte virtuel Apache.

Articles connexes: