Como o Apache2 VirtualHosts é resolvido?

2

Pelo que entendi, quando você solicita um URL de um site usando seu navegador, ele pergunta ao servidor DNS que o sistema operacional está apontando se ele sabe o endereço IP que está relacionado ao nome do DNS do servidor; então, se o servidor DNS encontrar o servidor solicitado, ele retornará o ip para que o navegador possa solicitar o URL do servidor da web.

Considerando que, neste ponto, o navegador solicita a URL usando o endereço IP do servidor e não o nome DNS, como o servidor da Web (Apache2) sabe como retornar o VirtualHost correto, que está associado ao nome do DNS?

Minha cabeça me diz que tem algo a ver com os cabeçalhos do navegador, mas não tenho certeza disso.

Observação: veja um solução relacionada

    
por leeand00 22.03.2013 / 23:35

2 respostas

3

Uma solicitação HTTP tem vários cabeçalhos, não apenas o caminho solicitado. Um desses cabeçalhos (o cabeçalho Host: ) é o nome do host que você solicitou (portanto, "unix.stackexchange.com" para unix.SE). O Apache analisa isso e atende a solicitação apropriadamente.

Como uma observação: o HTTPS costumava ser restrito a um certificado por IP, porque o cabeçalho Host: é criptografado. Até que o servidor obtenha esse cabeçalho, ele não saberá qual certificado enviar, mas não poderá obter o cabeçalho até receber a solicitação (que requer o certificado). Isso foi resolvido no TLS por meio da extensão Indicação do nome do servidor, que adiciona algo como o cabeçalho Host no handshake inicial.

    
por 23.03.2013 / 00:08
0

Os hosts virtuais HTTP funcionam usando o servidor HTTP como um "servidor proxy" para eles mesmos, e o navegador está enviando o cabeçalho do host que é usado para identificar o host virtual de destino.

    
por 23.03.2013 / 00:09