Configurando VirtualHosts no Apache

January 7th, 2005

Category: Administracao e Suporte

Tagged with:

Este tutorial mostra como proceder para criar VirtualHosts no Apache, um recurso muito útil e largamente utilizado pelos provedores de hospedagem de sites.


Configurando VirtualHosts no Apache

O recurso de VirtualHosts do Apache é uma importante característica deste software. Ele permite que um mesmo servidor hospede diferentes web sites, cada um com sua própria URL. O visitante de seus sites não percebem isso. Por exemplo, você pode hospedar o http://www.sounerd.com.br e o http://mambo-services.com no mesmo servidor Apache. Isso é utilizado por provedores de serviços de hospedagem de sites web, pois ficaria inviável colocar cada site de cliente em uma máquina separada. Para o desenvolvedor ou mantenedor de web sites também é interessante saber como utilizar este recurso, visto que normalmente estes profissionais precisam manter cópias destes sites em sua estação de trabalho.

Existem dois tipos de VirtualHosts: baseados em IP e baseados em nome, no jargão comum, IP-based e Name-based. O mais comum é o tipo Name-based, pois ele permite compartilhar o mesmo IP e porta entre os diversos VirtualHosts. Isso nos dá uma flexibilidade muito grande, dado a escassez de endereços IPv4 atual, além do fato de não exigir máquinas diferentes, ou diversas placas de rede em um mesmo servidor. O tipo IP-based é utilizado quando é necessário que cada VirtualHost tenha um IP dedicado, como o uso de SSL. Alguns sistemas operacionais permitem que sejam atribuídos vários IPs para uma mesma placa de rede, o que alivia o custo de hardware e manutenção.

O modo Name-based em VirtualHosts é viável devido ao protocolo HTTP versão 1.1 incluir o hostname nos cabeçalhos da requisição. Desta forma, o Apache sabe para quem direcionar a solicitação do browser do usuário. Antigos browsers que usem HTTP/1.0 terão problemas, mas ainda assim normalmente existe uma extensão que pode ser instalada para que eles incluam o hostname no header.

O módulo mod_vhost_alias do Apache deve ser carregado para habilitar esta função, entretanto este módulo tem vindo configurado como padrão na grande maioria de pacotes pré-compilados.

Configuração

A configuração de VirtualHosts é simples, exigindo apenas a alteração do arquivo “httpd.conf”. Você deve encontrar este arquivo na sua instalação e abrí-lo com um editor de texto comum, como o “vi”. No Linux normalmente ele pode ser encontrado no diretório “/etc/apache/”.

Procure por uma seção chamada “Section 3: Virtual Hosts”. Nela você encontra alguns comentários explicativos e uma configuração de exemplo, também na forma de comentários. Cada seção definindo um “VirtualHost” começa com uma tag “<VirtualHost …>” e termina com uma tag “</VirtualHost>”. Sugiro copiar o bloco das linhas que compôem o exemplo, e não escrever por cima dele. Desta forma você mantêm o exemplo original caso precise de um referência novamente.

Configuração Name-based

Para uma configuração baseada em nome você deve retirar o comentário da diretiva “NameVirtualHost”, no arquivo httpd.conf. Mantenha o *:80 se você quiser que o serviço escute em todas as interfaces do seu sistema. Se você vai acessar seus serviços web apenas a partir da própria máquina, é mais seguro colocar em “listening” somente o IP do loopback, ou seja, 127.0.0.1:80. Esta linha, por exemplo, pode ser assim:

#
# Use name-based virtual hosting.
#
NameVirtualHost 127.0.0.1:80


Encontre também a diretiva “Listen”, da Seção 1, e coloque-a assim:

#Listen 80
Listen 127.0.0.1:80


Deste modo, evitamos que o Apache faça o bind para todas as interfaces da máquina. Ele faria isso mesmo com a diretiva “NameVirtualHost” configurada apenas para o loopback.

É importante observar que as configurações do seu servidor principal (main server) serão herdadas por todos os seus VirtualHosts, a não ser que sejam redefinidas nas suas respectivas seções. Por exemplo, a diretiva “DocumentRoot” redefine a localização de seus arquivos para o VirtualHost.

No caso mais simples você redefine apenas as diretivas “DocumentRoot” e “ServerName”. Veja a configuração abaixo:

<VirtualHost sounerd.local:80>
DocumentRoot "/home/hlbog/www"
ServerName sounerd.local
</VirtualHost>
<VirtualHost mambo-services.local:80>
DocumentRoot "/home/hlbog/mambosupport"
ServerName mambo-services.local
</VirtualHost>


Nela estamos criando dois VirtualHosts: o nome “sounerd.local” responderá na porta 80 e seus arquivos estão localizados no diretório “/home/hlbog/www”; “mambo-services.local” também responderá na porta 80, e seus arquivos estão localizados em “/home/hlbog/mambosupport”.

Simples assim. Agora basta você reconfigurar seu DNS ou arquivos de hosts local, “/etc/hosts”. Seguindo a suposição de que esses serviços serão utilizados apenas localmente, através do IP de loopback, alteramos nosso arquivo “/etc/hosts” para que possamos resolver os dois nomes utilizados:

127.0.0.1       localhost.local localhost sounerd.local sounerd mambo-services.local mambo-services


Lembre-se: caso você deseje acessar esses serviços a partir de outra máquina, você não pode usar o loopback. Você deve atribuir os nomes ao IP real da sua placa de rede no arquivo “httpd.conf”, fazer a alteração no “/etc/hosts” ou no seu servidor local de DNS da sua rede, e configurar a firewall do servidor que hospeda o Apache para aceitar conexões na porta 80.

Podemos testar a configuração através da opção “-S” do comando apachectl:

root@localhost:~# /usr/sbin/apachectl -S
VirtualHost configuration:
127.0.0.1:80 is a NameVirtualHost
default server sounerd.local (/etc/apache/httpd.conf:1085)
port 80 namevhost sounerd.local (/etc/apache/httpd.conf:1085)
port 80 namevhost mambo-services.local (/etc/apache/httpd.conf:1092)
Syntax OK


Veja que o primeiro VirtualHost sempre é considerado o “main server”.

Agora é só iniciar o Apache:

root@localhost:~# /etc/rc.d/apache start


Este comando pode variar de acordo com a sua distribuiçao Linux. No Windows procure o serviço correspondente no applet “Services”.

Configuração IP-based

A configuração baseada em IP é bem semelhante. Primeiro você não deve habilitar a diretiva “NameVirtualHost”, deixando-a comentada:

#NameVirtualHost *:80


Vamos colocar o servidor de “mambo-services.local” para “ouvir” no IP de nossa placa de rede (no nosso exemplo 192.168.1.100), e o servidor “sounerd.local” para ouvir no IP de loopback.

Encontre na Seçao 1 a diretiva “Listen”. Ela deve estar configurada como “Listen 80″. Altere da forma abaixo, de modo que o Apache não faça o bind para todas as interfaces.

#Listen 80
Listen 127.0.0.1:80
Listen 192.168.1.100:80


Não precisamos mudar mais nada no arquivo “httpd.conf”, além das diretivas “NameVirtualHost” e “Listen”. Basta que reorganizemos nossa resolução de nomes, no arquivo “/etc/hosts” ou no servidor DNS:

127.0.0.1       localhost.local localhost malcovich.local malcovich sounerd.local sounerd
192.168.1.100 mambo-services.local mambo-services


Novamente teste com a opção “-S”:

root@localhost:~# /usr/sbin/apachectl -S
VirtualHost configuration:
192.168.1.100:80 mambo-services.local (/etc/apache/httpd.conf:1092)
127.0.0.1:80 sounerd.local (/etc/apache/httpd.conf:1085)
Syntax OK


Inicie o Apache:

root@localhost:~# /etc/rc.d/apache start


Vamos confirmar que o Apache está fazendo o bind corretamente. O comando abaixo mostra todos os sockets que estão em LISTENING na sua máquina:

root@localhost:~# netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.100:80 0.0.0.0:* LISTEN


Você também poderia usar os IPs no arquivo “httpd.conf”:

<VirtualHost 127.0.0.1:80>
DocumentRoot "/home/hlbog/www"
ServerName sounerd.local
</VirtualHost>
<VirtualHost 192.168.1.100:80>
DocumentRoot "/home/hlbog/mambosupport"
ServerName mambo-services.local
</VirtualHost>


Veja a saída do “apachectl -S”:

root@localhost:~# /usr/sbin/apachectl -S
VirtualHost configuration:
192.168.1.100:80 mambo-services.local (/etc/apache/httpd.conf:1092)
127.0.0.1:80 sounerd.local (/etc/apache/httpd.conf:1085)
Syntax OK

Outras configurações podem ser complementadas nos VirtualHosts, como a “AddType”.

É isso, bom trabalho e um abraço.

— hlbog

No comments yet


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>