um pluguinho
Posts tagged virtualhost
VirtualHost não é host
Feb 20th
A muito estou trabalhando com desenvolvimento web, e sempre encontrei pelo caminho quem confundisse a configuração dos web servers, commumente chamada de VirtualHost com a configuração do host.
Para quem trabalha com redes ou servidores a definição de hosts, domínio, zonas e tantas outras coisas ligadas ao serviço de DNS são bem simples, mas nem todo desenvolver almeja entender ou querem entender como isso funciona, ao meu ver um erro, pois é muito importante entender pelo menos o básico de redes, para si tornar um bom programador.
Mas essa questão a parte, muitos confundem essa pequena diferença e acaba por não conseguirem configurar seus ambientes de testes corretamente. Para estes ai vai uma pequena explicação:
Como muitos já devem ter percebido ate aqui, VirtualHost não é o mesmo que host. Tente imaginar o seguinte o VirtualHost que você configurou dentro do seu web server é como um if ou um case, que testa por qual host o cliente chegou ao seu serviço. Ou seja ele esta lá analisado o cabeçalho das requisições http, e vê lá a informação de qual host o usuário digitou no browser para que ele conseguisse chegar ate seu servidor.
Já o host é como uma entrada em uma agenda de endereços que diz qual ip está associado a este nome. Existe duas formas de configurar um host, a primeira é através de um servidor de DNS, no caso do Linux commumente se utiliza o bind para tal tarefa, no caso do Windows existe uma implementação desse tipo de serviço em versões server, que por sinal utiliza muito do código do bind, para usuário domésticos ou mesmo programadores há uma serie de software comerciais que desempenham este papel.
Apesar da configuração do servidor de DNS ser a opção com mais características e com mais flexibilidade, se trata de uma configuração complexa, e muitas das vezes inviável ao programador, que quer apenas configurar um ambiente de teste. Em seu lugar podemos utilizar o apelido de ip, que é algo mais simples de ser configurado, com o empecilho de que só funciona na maquina onde for configurado.
Para esta configuração deve se editar o arquivo /etc/hosts no caso de ambientes Posix, como Mac os X, Linux, BSD’s, entre outros, e o arquivo C:/[windows|winnt]/System32/drivers/etc/hosts para máquinas Windows. Para ambos os casos a configuração é a mesma, adicione uma nova linha no arquivo e coloque primeiro o ip, depois o host, ficando assim:
... 127.0.0.1 apolo apolo.nasa.org 127.0.0.1 jupter ...
Observe quê se pode configurar mais de um apelido em uma mesma linha, basta apenas separar eles por um espaços. Algo muito importante que deve se deve entender é que essa configuração não é uma configuração de domínios, o fato de adicionar apolo.nasa.org não faz diferença algum para o domínio nasa.org, a não ser na minha própria maquina, o que estamos fazendo é apelidado o ip com o endereço inteiro: apolo.nasa.org para o ip 127.0.0.1.
Como isso funciona: quando um serviço ou um programa qualquer, como um browser, pede ao kernel do seu sistema para resolver o endereço chamado, o kernel antes de consultar o servidor de dns, verifica se para aquele endereço não existe uma entrada no arquivo hosts, uma vez encontrado um apelido ali, ele nem procura resolver o endereço no servidor, apenas responde com o ip.
Uma vez com o ip na mão o programa ou serviço, monta um cabeçalho http e envia-o ao ip na porta também especificada, o padrão é 80 para serviço de http. Dentre as informações que estão neste cabeçalho esta o nome do host que ser quer ter acesso, o web server recebe esse cabeçalho, e checa em seu “case” qual a configuração para este host.
Espero que isso possa ajudar aos programadores iniciantes que querem montar seus ambientes de teste para o desenvolvimento de aplicações web. Em um próximo post vou falar como é fácil configurar um VirtualHost no apache sobre Ubuntu, até lá!
