Hosts Virtuais são usados para que em uma única máquina física, com um único servidor Web (Apache) possa rodar diversos hosts (sites) com o mesmo IP. O melhor exemplo disso, é o que a Locaweb faz ao alocar sites, ínumeros sites para um único IP. Então vamos lá:
Primeiramente é necessário instalar o pacote Apache mais atual, digitando o comando abaixo ele atualizará o Banco de Dados dos programas e versões disponíveis ao seu sistema, note que é necessário rodar como usuário privilegiado para fazer alterações no sistema:
matante@omega:~$ sudo apt-get update
Ele solicitará a senha do usuário e baixará uma lista dos programas mais atuais. Por fim até o presente momento a versão mais atual do Web Server Apache é a 2, então, vamos instalá-la:
matante@omega:~$ sudo apt-get install apache2
Com isso ele mostrará todas as bibliotecas e pacotes que serão instalados para o perfeito funcionamento do programa, ele pergunta se deseja instalar, dando como opção [S/n]. Aperte "s" para continuar a instalação e espere finalizar. Assim que o prompt voltar ao normal, abra o browser de sua preferência e digite "127.0.0.1" ou "localhost" (sem as aspas). Deverá aparecer "It Works" sinalizando que funcionou a instalação e o Apache encontra-se rodando.
Caso falhe reinicie o serviço e tenta novamente com:
matante@omega:~$ sudo /etc/init.d/apache2 restart
Após ter a certeza que o Apache encontra-se funcionando, vamos ao entendimento. O diretório padrão do Apache se localiza em /etc/apache2, abaixo os arquivos e diretórios que iremos utilizar:
apache2.conf -> principal arquivo de configuração do Apache;
httpd.conf -> principal arquivo de configuração em algumas releases do apache, similar ao apache2.conf;
ports.conf -> arquivo responsável pelas portas no qual o servidor apache ficará escutando requisições, bem como os Ips utilizados para acessá-lo;
sites-available -> diretório no qual os arquivos de configurações do hosts (sites) ficam disponíveis, porém não em uso;
sites-enabled -> diretório no qual os arquivos de configurações dos hosts (sites) ficam disponíveis e habilitados (em uso);
Uma maneira simples de sincronizar e entender os dois diretórios acima, é criando o arquivo do host no diretório sites-available e criando um link simbólico em sites-enabled para ele.
Então vamos querer 3 hosts virtuais, compartilhando o mesmo IP. Ex: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
Assim existirá 3 arquivos de configuração dentro do diretório sites-available. Note que já existe um arquivo dentro de sites-available chamado de default (é o arquivo responsável pela página de demonstração do apache), copie ele para usar como base:
matante@omega:/etc/apache2/sites-available$ cp default teste1
matante@omega:/etc/apache2/sites-available$ cp default teste2
matante@omega:/etc/apache2/sites-available$ cp default teste3
Após isto, vamos criar o link simbólico dentro de sites-enabled:
matante@omega:/etc/apache2/sites-enabled$ ln -s ../sites-available/teste1 teste1
matante@omega:/etc/apache2/sites-enabled$ ln -s ../sites-available/teste2 teste2
matante@omega:/etc/apache2/sites-enabled$ ln -s ../sites-available/teste3 teste3
Feito isto vamos editar cada arquivo dos hosts, altere ou crie (caso não exista) estes parâmetros e deixe da seguinte forma:
<VirtualHost *>
ServerName Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
ServerAlias teste1.com.br
DocumentRoot /var/www/teste1
DirectoryIndex /index.html
Explicando: Ao deixar apenas "*" no VirtualHost vc está dizendo que esta página estará disponível através de qualquer IP e em qualquer porta, porém lembre-se que quem realmente controla isto é o arquivo ports.conf. ServerName é o nome pelo qual você deseja que seu host responda, e o ServerAlias é apenas uma convenção para uso sem o www, já que a porta 80 já está associada a isto. DocumentRoot é o diretório onde forms, imagens e scripts da sua página estará. Pode existir aonde você quiser, usei o relatado acima pois é onde o Apache utiliza por default. E a diretiva DirectoryIndex é para o host virtual inicializar direto neste form, para não ter que digitar Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Repita as mesmas etapas nos arquivos de configurações dos hosts a serem criados, lembrando de adaptar as diretivas de acordo com cada host.
Após isto é necessário criar o diretório que terá os forms, scripts, imagens e tudo mais relacionado a página em si. Como dito acima utilizei o /var/www porque é o padrão do Apache e onde a página de demonstração está criada. Lembre-se o local e a página de inicialização devem ser idênticos ao descrito no arquivo de configuração do host, como expliquei acima.
Concluindo é necessário alterar o arquivo ports.conf, de forma que ele escute em todos os IPs e na porta 80:
NameVirtualHost *
Listen 80
Agora finalmente devemos adicionar os hosts virtuais ao Apache com o comando "a2ensite", da seguinte forma:
matante@omega:/etc/apache2/sites-enabled$ sudo a2ensite teste1
Enabling site teste1.
matante@omega:/etc/apache2/sites-enabled$ sudo a2ensite teste2
Enabling site teste2.
matante@omega:/etc/apache2/sites-enabled$ sudo a2ensite teste3
Enabling site teste3.
Observe que o parâmetro que acompanha o comando é o nome do arquivo de configuração do host virtual. Após isto reinicie o serviço Apache:
matante@omega:~$ sudo /etc/init.d/apache2 restart
Abra o Browser e coloque: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ou Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., se o seu form inicial estiver dividamente criado e apontado no arquivo de configuração, irá abrir normalmente como hosts separados. Ou seja hosts virtuais.
Obs: Esta resolução ocorre apenas localmente, tenha em mente que resoluções de nome em uma rede pública é feita por DNS.
Necessitando de uma configuração a mais. O demonstrado neste artigo foi apenas a criação e configuração no Apache. Até para funcionar numa Lan, seria necessário uma configuração em DNS. Apenas quis demonstrar a criação de intranets ou mesmo sites diversos utilizando o mesmo IP, como relatado acima o que a Locaweb utiliza.
Existem outras maneiras de se fazer o mesmo, espero ter demonstrado a mais simples.
Caso alguém queira complementar, corrigir ou perguntar estou disposto a ajudar.
By Matante
Primeiramente é necessário instalar o pacote Apache mais atual, digitando o comando abaixo ele atualizará o Banco de Dados dos programas e versões disponíveis ao seu sistema, note que é necessário rodar como usuário privilegiado para fazer alterações no sistema:
matante@omega:~$ sudo apt-get update
Ele solicitará a senha do usuário e baixará uma lista dos programas mais atuais. Por fim até o presente momento a versão mais atual do Web Server Apache é a 2, então, vamos instalá-la:
matante@omega:~$ sudo apt-get install apache2
Com isso ele mostrará todas as bibliotecas e pacotes que serão instalados para o perfeito funcionamento do programa, ele pergunta se deseja instalar, dando como opção [S/n]. Aperte "s" para continuar a instalação e espere finalizar. Assim que o prompt voltar ao normal, abra o browser de sua preferência e digite "127.0.0.1" ou "localhost" (sem as aspas). Deverá aparecer "It Works" sinalizando que funcionou a instalação e o Apache encontra-se rodando.
Caso falhe reinicie o serviço e tenta novamente com:
matante@omega:~$ sudo /etc/init.d/apache2 restart
Após ter a certeza que o Apache encontra-se funcionando, vamos ao entendimento. O diretório padrão do Apache se localiza em /etc/apache2, abaixo os arquivos e diretórios que iremos utilizar:
apache2.conf -> principal arquivo de configuração do Apache;
httpd.conf -> principal arquivo de configuração em algumas releases do apache, similar ao apache2.conf;
ports.conf -> arquivo responsável pelas portas no qual o servidor apache ficará escutando requisições, bem como os Ips utilizados para acessá-lo;
sites-available -> diretório no qual os arquivos de configurações do hosts (sites) ficam disponíveis, porém não em uso;
sites-enabled -> diretório no qual os arquivos de configurações dos hosts (sites) ficam disponíveis e habilitados (em uso);
Uma maneira simples de sincronizar e entender os dois diretórios acima, é criando o arquivo do host no diretório sites-available e criando um link simbólico em sites-enabled para ele.
Então vamos querer 3 hosts virtuais, compartilhando o mesmo IP. Ex: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar....
Assim existirá 3 arquivos de configuração dentro do diretório sites-available. Note que já existe um arquivo dentro de sites-available chamado de default (é o arquivo responsável pela página de demonstração do apache), copie ele para usar como base:
matante@omega:/etc/apache2/sites-available$ cp default teste1
matante@omega:/etc/apache2/sites-available$ cp default teste2
matante@omega:/etc/apache2/sites-available$ cp default teste3
Após isto, vamos criar o link simbólico dentro de sites-enabled:
matante@omega:/etc/apache2/sites-enabled$ ln -s ../sites-available/teste1 teste1
matante@omega:/etc/apache2/sites-enabled$ ln -s ../sites-available/teste2 teste2
matante@omega:/etc/apache2/sites-enabled$ ln -s ../sites-available/teste3 teste3
Feito isto vamos editar cada arquivo dos hosts, altere ou crie (caso não exista) estes parâmetros e deixe da seguinte forma:
<VirtualHost *>
ServerName Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
ServerAlias teste1.com.br
DocumentRoot /var/www/teste1
DirectoryIndex /index.html
Explicando: Ao deixar apenas "*" no VirtualHost vc está dizendo que esta página estará disponível através de qualquer IP e em qualquer porta, porém lembre-se que quem realmente controla isto é o arquivo ports.conf. ServerName é o nome pelo qual você deseja que seu host responda, e o ServerAlias é apenas uma convenção para uso sem o www, já que a porta 80 já está associada a isto. DocumentRoot é o diretório onde forms, imagens e scripts da sua página estará. Pode existir aonde você quiser, usei o relatado acima pois é onde o Apache utiliza por default. E a diretiva DirectoryIndex é para o host virtual inicializar direto neste form, para não ter que digitar Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar.... Repita as mesmas etapas nos arquivos de configurações dos hosts a serem criados, lembrando de adaptar as diretivas de acordo com cada host.
Após isto é necessário criar o diretório que terá os forms, scripts, imagens e tudo mais relacionado a página em si. Como dito acima utilizei o /var/www porque é o padrão do Apache e onde a página de demonstração está criada. Lembre-se o local e a página de inicialização devem ser idênticos ao descrito no arquivo de configuração do host, como expliquei acima.
Concluindo é necessário alterar o arquivo ports.conf, de forma que ele escute em todos os IPs e na porta 80:
NameVirtualHost *
Listen 80
Agora finalmente devemos adicionar os hosts virtuais ao Apache com o comando "a2ensite", da seguinte forma:
matante@omega:/etc/apache2/sites-enabled$ sudo a2ensite teste1
Enabling site teste1.
matante@omega:/etc/apache2/sites-enabled$ sudo a2ensite teste2
Enabling site teste2.
matante@omega:/etc/apache2/sites-enabled$ sudo a2ensite teste3
Enabling site teste3.
Observe que o parâmetro que acompanha o comando é o nome do arquivo de configuração do host virtual. Após isto reinicie o serviço Apache:
matante@omega:~$ sudo /etc/init.d/apache2 restart
Abra o Browser e coloque: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... ou Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar..., se o seu form inicial estiver dividamente criado e apontado no arquivo de configuração, irá abrir normalmente como hosts separados. Ou seja hosts virtuais.
Obs: Esta resolução ocorre apenas localmente, tenha em mente que resoluções de nome em uma rede pública é feita por DNS.
Necessitando de uma configuração a mais. O demonstrado neste artigo foi apenas a criação e configuração no Apache. Até para funcionar numa Lan, seria necessário uma configuração em DNS. Apenas quis demonstrar a criação de intranets ou mesmo sites diversos utilizando o mesmo IP, como relatado acima o que a Locaweb utiliza.
Existem outras maneiras de se fazer o mesmo, espero ter demonstrado a mais simples.
Caso alguém queira complementar, corrigir ou perguntar estou disposto a ajudar.
By Matante