segunda-feira, 21 de fevereiro de 2011

Como Configurar Vários Domínios no Apache 2

Este artigo ensina como fazer para que seu Apache aceite requisições com um ou mais domínios diferentes. Antes de mais nada, lembre-se de que é preciso que você registre o domínio que você deseja usar e que exista um servidor de DNS, como o Bind, configurado e rodando em seu servidor, de forma que ele intercepte as requisições e as envie para o Apache. O escopo deste artigo é apenas a configuração do Apache, e não a do Bind ou como fazer para pagar e registrar um domínio na internet.
Com a técnica ensinada aqui, você poderá receber em seu servidor requisições para vários domínios (ex: www.dominio1.com.br, www.dominio2.com.br, www.dominio3.com.br, etc.) e processá-las pelo Apache para que as chamadas sejam redirecionadas para a pasta virtual correta (ex: /var/www/site1, /var/www/site2, /var/www/site3). Se não é exatamente isto que você deseja, mas é próximo, ou se é isso e mais um pouco, você pode tentar vasculhar a documentação do Apache 2 sobre a criação de Virtual Hosts, clicando aqui.


  • Pré-Requisitos para a Configuração dos Domínios no Apache

Vamos partir de um exemplo... imagine que desejemos configurar os seguintes domínios:

www.dominio1.com.br para /var/www/site1
www.dominio2.com.br para /var/www/site2
www.dominio3.com.br para /var/www/site2

Consideremos que:

1- Os sites existem e já respondem perfeitamente com os endereços:

[nome de seu servidor]/site1/
[nome de seu servidor]/site2/
[nome de seu servidor]/site3/

2- Os três domínios foram comprados em um serviço de registro de domínios, a fatura está paga e todos já se encontram devidamente registrados;

3- O Bind (ou outro servidor DNS) de seu servidor está funcionando e está configurado para redirecionar as chamadas a estes domínios para seu inocente Apachezinho...

4- No serviço de registro de domínios, você já configurou o uso de seu DNS (nome e IP dos DNS primário e secundário) e já esperou o tempo necessário para a replicação desta informação pela rede.

É claro que estas condições podem ser ligeiramente modificadas de acordo com sua situação, mas, em geral, é isso de que precisamos para começar a trabalhar...


  • Criando o Virtual Host

Para o Apache 2, as diversas configurações a respeito do acesso às pastas virtuais ficam em contêineres <VirtualHost>. Estes contêineres normalmente ficam no arquivo /etc/apache2/apache2.conf. Evidentemente, modificar este arquivo é permitido apenas ao root e as modificações exigem que se reinicie o Apache para tomar efeito.
Cada domínio novo supõe uma nova configuração do VirtualHost, ou seja, um novo contêiner. Assim, para a realização do exemplo, precisaremos de 3 contêineres, um para cada domínio, conforme segue:

<VirtualHost *:80>
ServerName www.dominio1.com.br
ServerAlias dominio1.com.br *.dominio1.com.br
DocumentRoot /var/www/site1
</VirtualHost>

<VirtualHost *:80>
ServerName www.dominio2.com.br
ServerAlias dominio2.com.br *.dominio2.com.br
DocumentRoot /var/www/site2
</VirtualHost>

<VirtualHost *:80>
ServerName www.dominio3.com.br
ServerAlias dominio3.com.br *.dominio3.com.br
DocumentRoot /var/www/site3
</VirtualHost>


O que isso tudo significa?? Vamos por partes...

VirtualHost *:80 - Inicia a tag do contêiner, informando que estamos interessados na porta 80 (protocolo http). Se você, por algum motivo qualquer, usa outra porta, substitua o "80" pela porta desejada. O "*" pode ser substituído pelo IP interno de seu servidor.

ServerName www.dominio1.com.br - Indica o nome do domínio que você deseja configurar. Evidentemente, coloque o domínio que você registrou e que está configurado no Bind.

ServerAlias dominio1.com.br *.dominio1.com.br - Isto garante que quaisquer chamadas a este domínio vão ser redirecionadas para a pasta virtual que está sendo configurada.

DocumentRoot /var/www/site1 - Enfim, a referência no sistema de arquivos para a pasta virtual!! Ou seja, em que canto do disco está o seu portal. Note que, aqui, você só pode especificar uma pasta por VirtualHost. Por isso que necessitamos de três contêineres VirtualHost configurados!!

Se, por algum motivo, esta configuração não funcionar, então experimente acrescentar a linha:

NameVirtualHost *:80

Antes da declaração do primeiro VirtualHost.

Bom, pessoal, esta configuração é razoavelmente simples e indolor. É claro que você pode tornar a sua configuração do VirtualHost muito mais complexa, acrescentando as diversas diretivas suportadas pelo mesmo. Mas isto já seria tema para um novo artigo...
Se gostaram, detestaram, ajudou ou atrapalhou, então COMENTEM!!!

13 comentários:

Adriano disse...

Muito bom tutorial, funcionou perfeitamente no Ubuntu 12.10!

O Pajé disse...

Obrigado, Adriano!!
Torço que o Pajé continue te ajudando!!

Anônimo disse...

Muito útil ... resolveu meu problema

O Pajé disse...

Muito obrigado pela resposta!! Torço que o Pajé Online continue ajudando a vc e a muitos outros que nos visitam!!

Marcio Lima da Cunha disse...

Existe maneira de que:
tenho um dominio interno rodando no meu virtualhost.

ex. sintaseinfo.bo.com

queria q o mesmo fose atendido pela rede externa "internet" e nao somente em localhost.

necesito registrar um dominio? como eu poderia ter minha propria extencao de dominios externos?

O Pajé disse...

Olá Marcio,

No Apache, você consegue configurar apenas o que o servidor onde ele está tem alcance, ou seja, em localhost e, com sorte, na rede interna que o localhost gerencie.

Para você ter um domínio externo, visível por toda a rede global, é preciso registrá-lo em uma empresa que preste este serviço. Para isso, você tem que ter um servidor de DNS (pelo qual sua máquina se conecta à internet, o que possivelmente você já tem) e precisa contratar uma empresa que registre domínios.

Depois de contratar o serviço, você terá o domínio acionado e poderá configurá-lo para acessar a sua máquina servidora, ou seja, configurar o domínio externo para que ele aponte para o localhost onde rodando o seu Apache.

Espero ter ajudado!!

Pajé

pcmanutencao disse...

show man funfo legal....havia pego explicações em outros posts mas não tinha funcionado...muto simples e funfou valew brother

O Pajé disse...

Muito obrigado, rapaz!! Fico feliz de ter ajudado!!

Abraços do Pajé!!

Admin disse...

olá, obrigado pelo tutorial, muito bom. Algumas coisas consegui entender, outras não! vamos lá... Veja meu cenário:

Tenho um servidor contratado pela LOCAWEB, também tenho um domínio registrado pela mesma, nesse servidor a qual tenho acesso root e gerenciado por mim, instalei um ambiente virtual de aprendizagem (moodle). Como o servidor é bem robusto, quero hospedar outro site nele, um site básico para uma empresa, já registrei um novo domínio no site registro.br. Agora eu quero apontar esse novo domínio para o meu servidor, especificamente para a pasta /var/www/cocogengibre.com.br, sendo que já tenho outro domínio (helpclassonline.com.br), apontando para esse mesmo servidor, para a pasta /var/www/moodle. No tutorial você orienta para configurar o virtual host, até ai tudo bem, e sobre o servidor de DNS? preciso instalar nesse servidor? no site registro.br lá tem a opção para configurar o domínio e apontar para o ip do meu servidor, mais existe também outro domínio apontando para o mesmo ip, como fica isso?

Tiago Galera disse...

Muito obrigado, era exatamente o que eu precisava!

O Pajé disse...

Disponha, Tiago! É um prazer ajudá-lo!

Valdigleis S. Costa disse...
Este comentário foi removido pelo autor.
Valdigleis S. Costa disse...

Pajé segui seu tutorial e não deu certo de jeito nenhum, na verdade deu foi um pau tão grande no apache que tive que re-instalar tudo (apache, php, phpmyadmin). Teria como você fazer um tutorial sobre como fazer esse procedimento em detalhes, para quem usa LAMP como eu, lembrando que estou em nível iniciante, então quanto mais didático e com exemplos e imagens melhor seria! De toda forma, parabéns pelo blog!