Hosts Virtuais
Um host virtual é uma entidade de configuração que permite que uma única máquina host se pareça com várias máquinas. Mantém uma lista de tipos MIME (Multipurpose Internet Mail Extensions) que ele processa. É possível associar um host virtual a um ou mais módulos da Web, mas cada módulo da web pode ser associado a um, e somente um, host virtual. Os recursos associados a um host virtual não podem compartilhar dados com os recursos associados a um outro host virtual, mesmo que os hosts virtuais compartilhem da mesma máquina física.
Cada host virtual tem um nome lógico e uma lista de um ou mais aliases DNS pelos quais ele é conhecido. Um alias DNS é o nome do host e o número da porta TCP/IP utilizados para solicitar o servlet, por exemplo, yourHostName:80. Quando não for especificado nenhum número de porta, adota-se o 80.
A configuração do host virtual utiliza entradas de caracteres curinga com as portas para suas entradas de host virtual.
- O alias padrão é *:80, usando uma porta externa que não seja protegida.
- Aliases da forma *:9080 utilizam a porta interna que não seja protegida.
- Aliases da forma *:9443 utilizam a porta interna protegida.
- Aliases da forma *:443 utilizam a porta externa protegida.
Um pedido de cliente para um servlet, arquivo JavaServer Pages ou recurso relacionado contém um alias DNS e um URI (Uniform Resource Indicator) que é exclusivo para esse recurso. Quando o pedido de um cliente por um servlet, um arquivo JavaServer Pages ou um recurso relacionado é recebido, o alias DNS é comparado à lista de todos os grupos de hosts virtuais conhecidos para localizar o host virtual correto e o URI é comparado à lista de todos os grupos de URI conhecidos para localizar o grupo de URIs correto. Se o grupo de host virtual e grupo URI forem encontrados, o pedido será enviado ao grupo de servidores correspondente para processamento e uma resposta será retornada ao navegador. Se um grupo de host virtual correspondente ou grupo URI não for localizado, um erro será retornado ao navegador.
Um host virtual não está associado a um nó (máquina) específico. É uma configuração e não um objeto ativo que explica a razão para criá-lo, mas não iniciá-lo ou pará-lo. Um host virtual padrão, denominado default_host, é configurado automaticamente na primeira vez que você inicia um servidor de aplicativos. A menos que você queira especificamente isolar recursos uns dos outros no mesmo nó (máquina física), provavelmente não será necessário nenhum host virtual além do host padrão.
Os aliases DNS para o host virtual padrão são configurados como *:80 e *:9080, em que a porta 80 é a porta do servidor HTTP e a porta 9080 é a porta do transporte HTTP do servidor padrão. O host virtual padrão inclui aliases comuns, como o endereço IP da máquina, o nome abreviado do host e o nome completo do host. Um desses aliases contém a primeira parte do caminho para acessar um recurso, como um servlet. Por exemplo, o alias localhost:80 é utilizado no pedido http://localhost:80/myServlet.
A adição de um host local aos hosts virtuais adiciona o nome do host e o endereço IP da máquina do host local à tabela de aliases. Isso permite que um usuário remoto acesse o console administrativo.
É possível utilizar o console administrativo para incluir ou alterar aliases DNS se quiser utilizar portas diferentes das portas padrão. Se fizer alterações em um alias DNS, será necessário gerar novamente a configuração do plug-in de servidor da Web. É possível utilizar o console administrativo para iniciar a regeneração do plug-in.

- A instância do Servidor HTTP está sendo executada em uma porta que não é a 80. Inclua o número de porta correto a cada um destes aliases. Por exemplo, altere yourhost para yourhost:8000.
- Você deseja fazer pedidos de HTTPS, que utilizam SSL (Secure Sockets Layer). Para fazer pedidos de HTTPS, você deve incluir a porta 443 em cada um dos aliases. A porta 443 é a padrão para pedidos SSL.
- Sua instância de servidor da Web está atendendo pedidos SSL em uma porta diferente da 443. Nessa situação, você deve incluir o número da porta em cada um dos aliases.
- Você deseja utilizar uma porta diferente da porta padrão (9080) para o servidor de aplicativos.
- Você deseja utilizar outros aliases que não estão listados.
Quando você solicita um recurso, o produto tenta mapear o pedido para um alias de um host virtual definido. A partehttp://host:port/ do host virtual não faz distinção de maiúsculas e minúsculas, mas a URL que segue, sim. A correspondência para a URL deve ser exata de modo alfanumérico. Números de porta diferentes são tratados como aliases diferentes.
Por exemplo, o pedido http://www.myhost.com/myservlet é mapeado com êxito para http://WWW.MYHOST.COM/myservlet, mas não para http://WWW.MYHOST.COM/MYSERVLET ou Www.Myhost.Com/Myservlet. Nos dois últimos casos, esses mapeamentos falham por causa da distinção entre maiúsculas e minúsculas. O pedido http://www.myhost.com/myservlet não é mapeado com êxito para http://myhost/myservlet ou para http://myhost:9876/myservlet. Esses mapeamentos falham porque não estão alfanumericamente corretos.
É possível utilizar entradas de curingas para aliases por porta e especificar que todas as combinações válidas de nome de host e endereço em uma determinada porta sejam mapeadas para um determinado host virtual.
Se solicitar um recurso usando um alias que não possa ser mapeado para um alias de um host virtual definido, você receberá um erro 404 no navegador usado para emitir o pedido. Uma mensagem indicará que não foi possível localizar o host virtual.
- O web client solicita ao snoop servlet: no endereço da Web http://www.some_host.some_company.com:9080/snoop
- A máquina some_host possui a porta 9080 designada ao servidor de aplicativos independente, server1.
- O server1 verifica as designações do host virtual para determinar o host virtual designado ao alias some_host.some_company.com:9080.
- O servidor de aplicativos descobre que não existe nenhum alias explícito para a cadeia DNS. No entanto, a designação de um caractere curinga para o nome do host * na porta 9080 existe. Isso é uma correspondência. O host virtual que define a correspondência é default_host.
- O servidor de aplicativos verifica os aplicativos implementados no default_host e localiza o servlet snoop.
- O servidor de aplicativos entrega o aplicativo para o web client e o solicitador pode usar o snoop servlet.
Host Virtual | Alias | Port |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
my_machine | 9080 | |
my_machine.my_company.com | 9080 | |
localhost | 80 |
O servidor de aplicativos procura por uma correspondência utilizando o endereço explícito especificado no endereço do web client. No entanto, ele pode resolver a correspondência com qualquer outro alias que corresponda ao padrão antes de corresponder ao endereço explícito. A simples definição de um alias primeiramente na lista de aliases não garante a ordem de procura quando o produto procurar por um alias correspondente.
Pode ocorrer um problema se você utilizar o mesmo alias para dois hosts virtuais diferentes. Por exemplo, suponhamos que você tenha instalado o aplicativo padrão e o servlet snoop no default_host. Você também tem outro host virtual chamado admin_host. No entanto, você não instalou o aplicativo padrão nem o servlet snoop no admin_host.
Host Virtual | Alias | Port |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
admin_host | * | 9060 |
my_machine.com | 9080 |
Presume que um pedido do Web client entre para http://my_machine.com:9080/snoop.
Se o servidor de aplicativos corresponder ao pedido junto a *:9080, o aplicativo será atendido a partir do default_host. Se o servidor de aplicativos corresponder ao pedido para my.machine.com:9080, o aplicativo não poderá ser localizado. Um erro 404 ocorre no navegador que emite o pedido. Uma mensagem indicará que não foi possível localizar o host virtual.
Esse problema é o resultado de não localizar o aplicativo solicitado no primeiro host virtual que tem um alias correspondente. A maneira correta de codificar aliases é o nome do alias em um pedido que chega corresponder somente a um host virtual entre todas as suas definições de host virtual. Se o URL corresponder a mais de um host virtual, você verá o problema que acaba de ser descrito.