Hosts virtuales
Un host virtual es una entidad de configuración que permite que una única máquina de host parezca varias máquinas de host. Mantiene una lista de los tipos MIME (Multipurpose Internet Mail Extensions) que procesa. Puede asociar un host virtual a uno o varios módulos Web, pero puede asociar cada módulo web a sólo un host virtual. Los recursos asociados con un host virtual no pueden compartir datos con recursos asociados con otro host virtual, incluso si los hosts virtuales comparten la misma máquina física.
Cada host virtual tiene un nombre lógico y una lista de uno o más alias DNS por los que es conocido. Un alias DNS es el nombre de host TCP/IP y el número de puerto utilizado para solicitar el servlet, por ejemplo, suNombreDeHost:80. Si no se especifica un número de puerto, se establece 80.
La configuración del host virtual utiliza comodines para especificar los puertos en las entradas de host virtual.
- El alias predeterminado es *:80, utilizando un puerto externo que no es seguro.
- Los alias que tienen el formato *:9080 utilizan el puerto interno que no es seguro.
- Los alias que tienen el formato *:9443 utilizan el puerto interno seguro.
- Los alias que tienen el formato *:443 utilizan el puerto externo seguro.
Una solicitud de cliente de un servlet, un archivo JSP (JavaServer Pages) o un recurso relacionado contiene un alias DNS y un URI (Uniform Resource Indicator) que es exclusivo de ese recurso. Cuando se recibe una solicitud de cliente de un servlet, un archivo JSP o un recurso relacionado, el alias DNS se compara con la lista de todos los grupos de hosts virtuales para localizar el host virtual correcto, y el URI se compara con la lista de todos los grupos de URI conocidos para localizar el grupo de URI correcto. Si se encuentran el grupo de hosts virtuales y el grupo de URI, la solicitud se envía al grupo de servidores correspondiente para su proceso y se devuelve una respuesta al navegador. Si no se encuentra un grupo de hosts virtuales o un grupo de URI que coincida, se devuelve un error al navegador.
Un host virtual no está asociado a un nodo (máquina) en particular. Es más bien una configuración, en vez de un objeto activo, lo cual explica por qué puede crearlo, pero no iniciarlo o pararlo. Un host virtual predeterminado, denominado default_host, se configura automáticamente la primera vez que se inicia un servidor de aplicaciones. A menos que desee específicamente aislar los recursos recíprocamente en el mismo nodo (la máquina física), probablemente no necesitará hosts virtuales adicionales en el host por omisión.
Los alias DNS del host virtual predeterminado se configuran como *:80 y *:9080, donde el puerto 80 es el puerto del servidor HTTP y el puerto 9080 es el puerto del transporte HTTP del servidor predeterminado. El host virtual predeterminado incluye alias comunes, tales como la dirección IP de la máquina, el nombre corto del host y el nombre del host plenamente cualificado. Uno de estos alias incluye la primera parte de la vía de acceso para acceder a un recurso tal como un servlet. Por ejemplo, el alias localhost:80 se utiliza en la solicitud http://localhost:80/myServlet.
La adición de un host local a los hosts virtuales añade el nombre de host y la dirección IP de la máquina de host local a la tabla de alias. Esto permite a un usuario remoto acceder a la consola administrativa.
Puede utilizar la consola administrativa para añadir o cambiar alias DNS si desea utilizar puertos distintos a los puertos predeterminados. Si realiza un cambio en un alias DNS, deberá regenerar la configuración del plug-in del servidor web. Puede utilizar la consola administrativa para iniciar la regeneración del plug-in.

- La instancia del servidor HTTP se ejecuta en un puerto distinto de 80. Añada el número de puerto correcto a cada uno de los alias. Por ejemplo, cambie su_host a su_host:8000.
- Desea realizar solicitudes HTTPS, que utilizan SSL (Secure Sockets Layer). Para realizar solicitudes HTTPS, debe añadir el puerto 443 a cada uno de los alias. El puerto 443 es el puerto predeterminado para las solicitudes SSL.
- La instancia del servidor web escucha las solicitudes SSL en un puerto distinto de 443. En este caso, debe añadir el número de puerto correcto a cada uno de los alias.
- Desea utilizar un puerto distinto al puerto predeterminado (9080) del servidor de aplicaciones.
- Desea utilizar otros alias que no aparecen en la lista.
Cuando se solicita un recurso, el producto intenta correlacionar la solicitud con un alias de un host virtual definido. La parte http://host:puerto/ del host virtual no es sensible a mayúsculas y minúsculas, pero el URL siguiente sí lo es. La correlación del URL debe ser exacta alfanuméricamente. Diferentes números de puertos se tratan como diferentes alias.
Por ejemplo, la solicitud http://www.myhost.com/myservlet se correlaciona correctamente con http://WWW.MYHOST.COM/myservlet pero no con http://WWW.MYHOST.COM/MYSERVLET o www.Myhost.Com/Myservlet. En los últimos dos casos, estas correlaciones fallan debido a la distinción entre mayúsculas y minúsculas. La petición http://www.myhost.com/myservlet no se correlaciona correctamente con http://myhost/myservlet ni con http://myhost:9876/myservlet. Estas correlaciones fallan porque no son alfanuméricamente correctas.
Puede utilizar comodines para los alias de puerto y especificar que todas las combinaciones de nombre de host y dirección válidas de un puerto determinado se correlacionan con un host virtual determinado.
Si se solicita un recurso utilizando un alias que no puede correlacionarse con un alias de un host virtual definido, se recibirá el error 404 en el navegador que se utilizó para emitir la solicitud. Un mensaje indicará que el host virtual no ha podido ser encontrado.
- El cliente web solicita el servlet snoop: en la dirección web http://www.some_host.some_company.com:9080/snoop
- La máquina some_host tiene asignado el puerto 9080 al servidor de aplicaciones autónomo server1.
- server1 consulta las asignaciones de host virtual para determinar el host virtual que tiene asignado el alias cualquier_host.cualquier_empresa..com:9080.
- El servidor de aplicaciones descubre que no existe ningún alias explícito para esa serie DNS. No obstante, existe una asignación de comodín para el nombre de host * en el puerto 9080. Esto es una coincidencia. El host virtual que define la coincidencia es default_host.
- El servidor de aplicaciones busca en las aplicaciones desplegadas en default_host y encuentra el servlet Snoop.
- El servidor de aplicaciones sirve la aplicación al cliente web y el solicitante puede utilizar el servlet snoop.
Host virtual | Alias | Puerto |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
my_machine | 9080 | |
my_machine.my_company.com | 9080 | |
localhost | 80 |
El servidor de aplicaciones busca una coincidencia utilizando la dirección explícita especificada en la dirección del cliente web. No obstante, puede encontrar la coincidencia en otro alias que coincida con el patrón antes de que coincida con la dirección explícita. La definición de un alias primero en la lista de alias no garantiza el orden de búsqueda cuando el producto busca un alias coincidente.
Se puede producir un problema si se utiliza el mismo alias para dos hosts virtuales diferentes. Por ejemplo, supongamos que ha instalado la aplicación predeterminada y el servlet Snoop en default_host. También tiene otro host virtual denominado admin_host. No obstante, no ha instalado la aplicación predeterminada o el servlet Snoop en admin_host.
Host virtual | Alias | Puerto |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
admin_host | * | 9060 |
my_machine.com | 9080 |
Supongamos que llega una solicitud de cliente web para http://my_machine.com:9080/snoop.
Si el servidor de aplicaciones hace coincidir la solicitud con *:9080, la aplicación recibe servicio de default_host. Si el servidor de aplicaciones hace coincidir la solicitud con my.machine.com:9080, no se puede encontrar la aplicación. Se produce un error 404 en el navegador que emite la solicitud. Un mensaje indicará que el host virtual no ha podido ser encontrado.
Este problema es el resultado de no encontrar la aplicación solicitada en el primer host virtual que tiene un alias coincidente. La forma correcta de codificar un alias es que el nombre de alias en una solicitud entrante coincida sólo con un host virtual en todas las definiciones de host virtual. Si el URL puede coincidir con más de un host virtual, aparecerá el problema que acabamos de describir.