Índice das dicas

Apache: Usando virtual hosts

Por Carlos E. Morimoto em 17 de novembro de 2010 às 16h50

6

O suporte a virtual hosts é um daqueles recursos fundamentais, que possibilitaram o surgimento da Internet da forma como a conhecemos hoje. Ele permite hospedar diversos sites, com domínios ou subdomínios diferentes usando um único servidor e um único endereço IP. Os únicos limitantes com relação ao volume de sites que é possível hospedar são os recursos de hardware do servidor e a banda disponível.

Serviços de hospedagem compartilhada (os planos de shared hosting) utilizam este recurso de forma intensiva, de forma a espremer o maior número possível de clientes em cada servidor, sem falar nos serviços de hospedagem gratuita onde, em muitos casos, um único servidor pode hospedar dezenas de milhares de sites diferentes.

Ao usar virtual hosts, os arquivos de cada site ficam guardados em uma pasta diferente e o servidor se encarrega de direcionar cada visitante à pasta correta. Os recursos do servidor (HD, memória, processamento e link) são divididos entre os sites hospedados, assim como vários programas abertos simultaneamente disputam os recursos da máquina. Isso faz muito sentido no caso de sites pequenos ou médios, que não possuem um número suficiente de visitas para saturarem, sozinhos, o servidor.

Em geral, o servidor é configurado de forma que os usuários tenham direito a uma determinada quota de espaço em disco, possam acessar os arquivos do site via FTP ou SFTP e tenham acesso a uma ou mais bases de dados do servidor MySQL, o que permite a instalação de gestores de conteúdo como o WordPress. Entretanto, eles não podem instalar novos pacotes nem alterar a configuração do servidor. Feitas as apresentações, vamos à configuração. :)

Invariavelmente, ao hospedar vários domínios, você precisa configurar um servidor DNS para responder por todos os domínios hospedados no servidor, entregando o endereço IP do seu servidor Apache. O cliente acessa então o servidor, solicitando o site desejado, como em "joao.com.br"; o servidor web verifica a configuração e entrega os arquivos apropriados ao cliente.

A configuração do servidor DNS é pouco intuitiva, mas não chega a ser tão complicada quanto muitos dizem. Em resumo, você precisaria instalar o bind no servidor e editar a configuração, adicionando uma nova configuração de zona para cada domínio hospedado. Isso é feito em duas etapas. Na primeira, você edita o arquivo named.conf, adicionando uma entrada com esta, especificando o domínio e o arquivo com a configuração:

zone "joao.com.br" IN {
type master;
file "/etc/bind/db.joao";
allow-transfer { 64.234.23.13; };
};

Dentro do arquivo "/etc/bind/db.joao", especificado no arquivo, iria uma configuração similar a esta, especificando o domínio, o nome do servidor e o endereço IP usado por ele, assim como o nome e o endereço IP do servidor DNS secundário:

@ IN SOA servidor.joao.com.br. hostmaster.joao.com.br. (
2008061645 3H 15M 1W 1D )
NS servidor.joao.com.br.
NS ns2.joao.com.br.
IN MX 10 servidor.joao.com.br.
joao.com.br. A 64.234.23.12
www A 64.234.23.12
ns1 A 64.234.23.13

Não é necessário que o DNS esteja instalado no mesmo servidor que o Apache, a função dele será unicamente responder às requisições dos clientes, fornecendo o IP correto.

Para ativar o uso dos virtual hosts, o primeiro passo é criar uma pasta separada para cada site que será hospedado. Você pode usar a própria pasta "/var/www", como em:

# mkdir /var/www/joao
# mkdir /var/www/maria

Em seguida, é necessário adicionar uma nova seção dentro da configuração do Apache para cada um, logo depois da configuração do site default.

Nas distribuições derivadas do Debian, são usados arquivos de configuração separados para cada site, armazenados na pasta "/etc/apache2/sites-available". Imagine que vamos hospedar os sites "www.joao.com.br" e "www.maria.com.br", usando as duas pastas criadas anteriormente. Criaríamos, então, um arquivo para cada site, contendo o seguinte:

  • /etc/apache2/sites-available/joao:
<VirtualHost *:80>
ServerAdmin joao@joao.com.br
ServerName www.joao.com.br
ServerAlias joao.com.br www.joao.com.br
DocumentRoot /var/www/joao
</VirtualHost>
  • /etc/apache2/sites-available/maria:
<VirtualHost *:80>
ServerAdmin maria@gmail.com
ServerName www.maria.com.br
ServerAlias maria.com.br www.maria.com.br
DocumentRoot /var/www/maria
</VirtualHost>

6 comentáriosPor Carlos E. Morimoto. Revisado 17 de novembro de 2010 às 16h50

Comentários

problema no virtual host
por rodrigo (anônimo) em 18 de janeiro de 2011 às 16h49
A configuração do virtual host dentro da rede funciona blz, exemplo criei duas contas:
wrodrigopereira.zapto.org
wpereira.zapto.org
Ambas no ip tb, mas quando acesso de fora da lan, sempre aparece a mesma página para ambos em vez de realizar o direcionamento para a pasta correta, como é feito dentro da lan o q poderia ser isto?
Desde já agradeço!!
Biguá
por Biguá em 17 de janeiro de 2011 às 15h31
Caro Morinoto, estou tentando configurar isso em um servidor local na minha maquina, apenas para testes, e por isso troquei todos os ips por 127.0.0.1 mas não funcionou,tens alguma dica aí? vlw
Correção
por Arimateia JR (anônimo) em 18 de novembro de 2010 às 20h59
O arquivo apache2.conf possue a seguinte linha:

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/

Ou seja, a pasta onde vc deve colocar os arquivos é /etc/apache2/sites-enabled/

Geralmente, coloca-se todas os arquivos dos sites na pasta /etc/apache2/sites-available/, porém tem que criar um link simbólico para o arquivo na pasta sites-enabled.

Isso na distribuição Debian 5.0 lenny.
 
por Jarbas (anônimo) em 24 de dezembro de 2009 às 10h11
apache + diretorio compartilhado

Por favor: tenho um apache instalado e quero substituir um IIS, no IIS está configurando um apontamento para um diretório compartilhando em Rede. É possível fazer isso no apache?
 
por Carlos E. Morimoto em 11 de agosto de 2008 às 18h14
Nesse caso você não precisaria usar virtual hosts, bastaria instalar o Apache e acessar através do 127.0.0.1

Se o objetivo for configurar um servidor de testes, acessível a partir da rede local, você pode fazer a configuração completa, instalando o DNS e cadastrando os domínios, mas utilizar o endereço de rede local do servidor. A dica é que você precisa configurar os outros micros da rede para utilizarem o DNS local.
 
por Moises (anônimo) em 11 de agosto de 2008 às 12h24
Excelente dica GDH. Mas se nos virtual hosts eu quizesse redirecionar pra localhost, como ficaria ?