Apache - Configurando Virtual Hosts
Aprenda a utilizar Virtual Host no Apache, acompanha um exemplo prático.
Este artigo é para quem quer configurar o Apache (localmente), através de Virtual Hosts, com o intento de imitar o ambiente de produção.
Quando desenvolvemos softwares, utilizamos nossa própria máquina como se fosse um servidor local, por isso chamamos ela de localhost. Os desenvolvedores sempre tentam imitar ao máximo o ambiente de produção e existem algumas técnicas para conseguir esse objetivo. Enquanto escrevo este artigo (jan/2015), a forma mais elegante de imitar o ambiente de produção é fazer uso do Vagrant, mas essa não é a única forma. Durante muito tempo (antes do Vagrant) fizemos isso utilizando uma Virtual Host, quer dizer, já é uma técnica ultrapassada, porém ainda muito utilizada.
O servidor Apache pode ser configurado para servir apenas a um site, o que é natural quando o cliente é dono e administra
o servidor. Neste caso, a pasta principal (documentroot) /var/www/
responderá por todos os sistemas ali instalados e
haverá uma única configuração para os diversos sistemas.
O Apache também pode ser configurado para hospedar vários sites no mesmo servidor, cada um com sua própria configuração, fazemos isso através do Virtual Host.
Configurar o Apache com a intenção de administrá-lo é um trabalho para os profissionais de infraestrutura, porém neste artigo nos vamos aprender a configurar o Apache apenas para adequar o ambiente de desenvolvimento. Digo isto para que você percebe a diferença entre as abordagens:
1. Configurar o Apache para atender a diversos sites e sistemas (ambiente de produção)
2. Configurar o Apache para desenvolver softwares (ambiente de desenvolvimento)
O que é Virtual Host ?
Virtual Hosts (sites virtuais) é um recurso que permite servir mais de um site no mesmo servidor. Podem ser usadas diretivas específicas para o controle do site virtual, como nome do administrador, erros de acesso a página, controle de acesso e outros dados úteis para personalizar e gerenciar o site. (wikibooks.org - Guia do Linux)
Imagine que você precise servir 2 sites distintos: www.joao.com.br
e www.maria.com.br
, cada qual com sua configuração,
exemplo:
// arquivo "/etc/apache2/sites-available/joao"
<VirtualHost *:80>
ServerName www.joao.com.br
DocumentRoot /var/www/joao
</VirtualHost>
// arquivo "/etc/apache2/sites-available/maria"
<VirtualHost *:80>
ServerName www.maria.com.br
DocumentRoot /var/www/maria
</VirtualHost>
Se listarmos o diretório /etc/apache2/sites-available/
veremos o seguinte resultado:
default
joao
maria
Estas são as Virtual Hosts disponíveis para seu servidor Apache. Para habilitar devemos utilizar o comando a2ensite
e
para desabilitar utilizamos o comando a2dissite
.
Repare que ambos os exemplos apontam para o documentroot padrão /var/www/
, ou seja o Virtual Host não é o responsável
pela redirecionamento. Se você configurar o Apache para um ambiente de produção você deve utilizar um
servidor de DNS, se você configurar o Apache para um
ambiente de desenvolvimento você pode utilizar algo mais simples que um DNS, o arquivo hots, por
exemplo.
Veja mais detalhes em hardware.com.br - Apache: Usando virtual hosts
Explicar o que é um Virtual Host através da teoria pode ser pouco produtivo, então vamos partir para um exemplo prático…
Criando uma Virtual Host
Nosso objetivo é criar um Virtual Host para o endereço fictício www.foo.local
. Os arquivos do projeto estarão em um
local parecido com este /pasta/de/projetos/foo
, logo, se digitarmos a URL no navegador, o servidor web deve
redirecionar para nossa pasta (/pasta/de/projetos/foo
).
Suponhamos que o projeto rode sobre o domínio www.foo.com.br
. Não vamos redirecionar o domínio oficial afim de evitar
que você tenha que modificar sua Virtual Host cada vez que precisar alternar entre a versão de produção e a de desenvolvimento.
Explico melhor:
-
A versão de produção responderá pela ULR
www.foo.com.br
-
A versão de desenvolvimento responderá pela ULR
www.foo.local
Vamos começar alterando o arquivo hots. Normalmente, ele se encontra no endereço /etc/hosts
.
O conteúdo do arquivo hosts deve ser como abaixo.
127.0.0.1 localhost
127.0.0.1 www.foo.local
Salve o arquivo e experimente acessar a URL www.foo.local
, você pode fazer isso através do navegador ou pelo utilitário
curl: curl www.foo.local
.
O resultado de www.foo.local
deve ser idêntico ao resultado de localhost
.
Agora, vamos partir para a configuração do Apache. Eu estou no Debian (wheezy), se você tiver em outra distro, talvez tenha que acertar um caminho ou outro mas, em geral, a configuração é bem parecida.
Vamos até a pasta onde o Apache guarda os Virtual Hosts cd /etc/apache2/sites-available
.
A partir desta pasta, como dito, o Apache pode habilitar ou desabilitar individualmente cada Virtual Hosts, faremos isso através dos comandos listados a seguir:
a2ensite nome-do-arquivo
- para habilitara2dissite nome-do-arquivo
- para desabilitar
Quando habilitamos um “site” o Apache cria um link para a pasta /etc/apache2/sites-enabled
, quando desabilitamos, ele
remove o link.
Crie um arquivo denominado simplesmente foo
e insira o seguinte conteúdo.
<VirtualHost *:80>
ServerName www.foo.local
ServerAlias foo.local
DocumentRoot /pasta/de/projetos/foo
</VirtualHost>
Corrija a diretiva DocumentRoot
para a pasta onde está seus projetos (pode ser qualquer pasta).
Podemos, então, habilitar o novo Virtual Host com o comando abaixo.
a2ensite foo
Para surtir efeito, devemos reiniciar o Apache.
Testando
Na pasta /pasta/de/projetos/foo
crie um arquivo HTML bem simples chamado index.html
, exemplo:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<title>Criando Virtual Host</title>
<meta charset="utf-8">
</head>
<body>
<p>Ok, sua Virtual Host foi configurada corretamente!</p>
</body>
</html>
Novamente, acesse a URL www.foo.local
, você deve ver o HTML acima renderizado.
Se encontrar algum problema, tente ver os logs do Apache tail /var/log/apache2/error.log
no Debian ou
tail /var/log/httpd/error_log
para família RedHat.
Veja também
CGI é um acrónimo para a expressão inglesa Common Gateway Interface. Consiste numa importante tecnologia que permite gerar páginas dinâmicas, permitindo a um navegador passar parâmetros para um programa alojado num servidor web. Assim, designam-se por scripts CGI os pequenos programas (veja exemplos ao longo da matéria) que interpretam esses parâmetros e geram a página depois de os processar.
Leia mais no artigo CGI Servindo páginas web (html)