Hôtes virtuels
Un hôte virtuel est une configuration permettant à une seule machine hôte de se comporter comme plusieurs. Il conserve une liste de types MIME (Multipurpose Internet Mail Extensions) qu'il traite. Vous pouvez associer un hôte virtuel à un ou plusieurs modules Web, mais ne pouvez associer chaque module Web qu'à un seul hôte virtuel. Les ressources associées à un hôte virtuel ne peuvent pas partager de données avec des ressources associées à un autre hôte virtuel, même si ces hôtes partagent la même machine physique.
Chaque hôte virtuel possède un nom logique et une liste d'un ou plusieurs alias DNS sous lequel ou lesquels il est connu. Un alias DNS est le nom d'hôte TCP/IP et le numéro de port qui sont utilisés pour envoyer des requêtes au servlet, par exemple nomdevotrehôte:80. Lorsqu'aucun numéro de port n'est indiqué, la valeur 80 est utilisée par défaut.
La configuration des hôtes virtuels utilise des entrées à caractères génériques pour les ports correspondant aux entrées d'hôtes virtuels.
- L'alias par défaut (*:80) utilise un port externe non sécurisé.
- Les alias *:9080 utilisent le port interne non sécurisé.
- Les alias *:9443 utilisent le port interne sécurisé.
- Les alias *:443 utilisent le port externe sécurisé.
Une demande client pour un servlet, un fichier JavaServer Pages ou une ressource liée contient un alias DNS et un URI (Uniform Resource Indicator) qui lui est unique. A la réception d'une demande client pour servlet, d'un fichier JavaServer Pages ou d'une ressource liée, l'alias DNS est comparé à la liste de tous les groupes d'hôtes virtuels connus afin de trouver celui qui est adapté ; pour sa part, l'URI est comparé à la liste de tous les groupes d'URI connus pour trouver le groupe correct. Si le groupe d'hôtes virtuels et l'URI sont trouvés, la requête est envoyée au groupe de serveurs correspondant pour traitement et une réponse est envoyée au navigateur. Si aucun groupe d'hôtes virtuels ou d'URI correspondant n'est trouvé en revanche, une erreur est renvoyée au navigateur.
Un hôte virtuel n'est pas associé à un noeud particulier (machine). Il s'agit d'une configuration plutôt que d'un objet actif, ce qui explique pourquoi il peut être créé, mais pas démarré ni arrêté. Un hôte virtuel par défaut, appelé hôte_pardéfaut, est configuré automatiquement la première fois que vous démarrez un serveur d'application. Sauf si vous souhaitez isoler des ressources les unes des autres sur le même noeud (machine physique), vous n'avez certainement pas besoin d'hôtes virtuels en plus de celui par défaut.
Les alias DNS pour cet hôte sont alors configurés comme *:80 et *:9080, où le port 80 est le port du serveur HTTP et le port 9080 celui de transport HTTP du serveur par défaut. L'hôte virtuel par défaut inclut des alias courants, comme l'adresse IP de la machine, le nom d'hôte abrégé et le nom d'hôte qualifié complet. L'un de ces alias comprend la première partie du chemin d'accès à une ressource, telle qu'un servlet. Par exemple, l'alias localhost:80 est employé dans la demande http://localhost:80/monServlet.
Lorsque vous ajoutez un localhost aux hôtes virtuels, le nom d'hôte et l'adresse IP de la machine localhost sont ajoutés à la table d'alias. Cela permet à un utilisateur distant d'accéder à la console d'administration.
Vous pouvez utiliser la console d'administration pour ajouter ou modifier des alias DNS si vous souhaitez utiliser des ports autres que ceux par défaut. Si vous changez un alias DNS, vous devez régénérer la configuration du module d'extension du serveur Web. Vous pouvez utiliser la console d'administration pour lancer la régénération du module d'extension.

- L'instance du serveur HTTP s'exécute sur un port autre que 80. Ajoutez le numéro de port correct à chaque alias. Par exemple, remplacez votrehôte par votrehôte:8000.
- Vous voulez faire des demandes HTTPS utilisant la couche SSL (Secure Sockets Layer). Pour faire des demandes HTTPS, vous devez ajouter le port 443 à chaque alias. Le port 443 est celui par défaut pour les demandes SSL.
- Votre instance de serveur Web écoute des demandes SSL sur un port autre que 443. Dans ce cas, vous devez ajouter ce numéro de port à chaque alias.
- Vous voulez utiliser un port autre que celui par défaut (9080) pour le serveur d'applications.
- Vous voulez utiliser d'autres alias non répertoriés.
Lorsque vous demandez une ressource, le produit tente de mapper la demande vers l'alias d'un hôte virtuel défini. La partie http://host:port/ de l'hôte virtuel ne fait pas de distinction entre les majuscules et les minuscules, à la différence de l'URL qui suit. Ce sont les caractères alphanumériques de l'URL qui sont pris en compte. Des numéros de port différents sont traités comme des alias différents.
Par exemple, la demande http://www.myhost.com/myservlet correspond à http://WWW.MYHOST.COM/myservlet mais non à http://WWW.MYHOST.COM/MYSERVLET ou Www.Myhost.Com/Myservlet. Dans les deux derniers cas, ces mappages ont échoué suite à la distinction entre les majuscules et les minuscules. La demande http://www.myhost.com/myservlet ne correspond pas à http://myhost/myservlet ou http://myhost:9876/myservlet. Ces mappages échouent car les caractères alphanumériques ne sont pas corrects.
Vous pouvez utiliser des caractères génériques pour les alias par port et spécifier que toutes les combinaisons valides nom d'hôte/adresse d'un port sont mappées en un hôte virtuel donné.
Si vous demandez une ressource en utilisant un alias ne pouvant être mappé vers l'alias d'un hôte virtuel défini, vous recevez une erreur 404 dans le navigateur utilisé pour la demande. Un message indique que l'hôte virtuel n'a pas été trouvé.
- Le client Web réclame le servlet snoop : à l'adresse Web http://www.some_host.some_company.com:9080/snoop
- Le port 9080 de la machine some_host est affecté au serveur d'applications autonome serveur1.
- serveur1 recherche dans les affectations d'hôte virtuel l'hôte virtuel affecté à l'alias some_host.some_company.com:9080.
- Le serveur d'applications constate qu'il n'existe aucun alias explicite pour cette chaîne DNS. Il existe toutefois une affectation de caractère générique pour le nom d'hôte * sur le port 9080. Il s'agit donc d'une occurrence. L'hôte virtuel qui définit l'occurrence est default_host.
- Le serveur d'applications recherche le servlet snoop parmi les applications déployées sur l'hôte default_host.
- Le serveur d'applications sert ensuite l'application au client Web et le demandeur peut utiliser le servlet snoop.
Hôte virtuel | Alias | port |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
my_machine | 9080 | |
my_machine.my_company.com | 9080 | |
localhost | 80 |
Le serveur d'applications recherche une correspondance à partir de l'adresse explicite spécifiée dans l'adresse du client Web. Toutefois, il peut accepter tout alias dont le format correspond à celui spécifié avant de rechercher l'adresse explicite. Le seul fait de définir un alias en premier dans la liste des alias ne garantit pas que la recherche s'effectuera dans cet ordre lorsque le produit recherchera un alias donné.
Un incident peut survenir si vous utilisez le même alias pour deux hôtes virtuels différents. Supposons par exemple que vous ayez installé l'application par défaut et le servlet snoop sur l'hôte default_host. Vous disposez également d'un autre hôte virtuel appelé admin_host. Toutefois, vous n'avez pas installé l'application par défaut ou le servlet snoop sur l'hôte admin_host.
Hôte virtuel | Alias | port |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
admin_host | * | 9060 |
my_machine.com | 9080 |
Supposons que vous receviez une demande d'un client Web pour http://my_machine.com:9080/snoop.
Si le serveur d'applications compare la requête à *:9080, l'application est servie depuis default_host. Si le serveur d'applications compare la demande à my.machine.com:9080, l'application est introuvable. Une erreur 404 se produit dans le navigateur qui génère la demande. Un message indique que l'hôte virtuel n'a pas été trouvé.
En effet, l'application demandée n'a pas été trouvée sur le premier hôte virtuel dont l'alias correspond. Pour coder correctement les alias, il est donc nécessaire que le nom d'alias d'une demande entrante ne corresponde qu'à un hôte virtuel parmi toutes vos définitions d'hôte virtuel. Si plusieurs hôtes virtuels correspondent à l'URL spécifiée, l'incident décrit ci-avant se produit.