Apache - configurando domínios com vhost

De Pontão Nós Digitais

Quando temos um servidor próprio, isto é, um servidor autonomamente configurado ou ainda uma conta do tipo cloud ou VPS, precisaremos configurar manualmente o Apache para resolver diferentes endereços de domínio numa mesma máquina. Em outras palavras, uma vez tendo um servidor que vai hospedar diferente sites com diferentes endereços precisaremos dizer para o apache onde estão as pastas que devem responder aos respectivos endereços.

O Apache divide suas funcionalidades e componentes em unidades individuais que podem ser personalizadas e configuradas independentemente. A unidade básica que descreve um determinado site ou um domínio é chamada virtual host.

Cada domínio que esteja configurado irá direcionar o visitante para um diretório específico que mantém as informações daquele site, nunca indicando que o mesmo servidor também é responsável por outros sites. Este esquema é expansível sem qualquer limite de software desde que seu servidor possa suportar a carga.

Vamos ver como isso funciona.

Pre requisitos

  • Apache ou LAMP completo instalado.
  • Usuário non-root para configurar o domínio e permissões de acesso
  • Estamos tomando como base um servidor linux Debian 8.0 devidamente instalado e com ip fixo configurado;

Estrutura de diretórios

O primeiro passo é criar uma estrutura de diretório que irá armazenar os dados do(s) site(s) que estará(ão) servindo aos visitantes.

Nosso document root (o diretório de nível superior que o Apache olha para encontrar o conteúdo para servir) será definido para diretórios individuais sob o diretório /var/www. Por padrão o Apache coloca o endereço /var/www/html, mas vamos criar um diretório especial.

1 - Dentro de cada um desses diretórios, vamos criar o diretório public_html que irá manter nossos arquivos reais. Isto nos dá certa flexibilidade em nossa hospedagem.

Por exemplo, para nossos sites, nós vamos criar nossos diretórios assim:

 # mkdir -p /var/www/site1.com.br/public_html
 # mkdir -p /var/www/site2.org.br/public_html

As partes em negrito representam os nomes de domínio que estamos querendo servir através de nosso servidor.

Você pode colocar um código de teste para verificar o funcionamento da página depois:

 
  <html>
  <head>
    <title>Exemplo!</title>
  </head>
  <body>
      <h1>Olá Mundo! Sucesso!</h1>
    </body>
  </html>

2 - Acrescente também, no endereçamento interno da máquina, os endereços que quiser. Isso server tanto para loopback quanto para endereço externo. No arquivo /etc/hosts coloque as linhas:

 127.0.0.1 site1.com.br Site1
 127.0.0.1 site2.org.br Site2
 200.133.0.99 site1.com.br Site1 (o IP 200.133.0.99 em questão é apenas um exemplo de ip fixo)
 200.133.0.99 site2.org.br Site2

Permissões

Depois da estrutura de diretórios para os arquivos é preciso desassociá-los do root e associá-los aos usuários devidos. Se quisermos que nosso usuário regular esteja apto a modificar arquivos em nossos diretórios web, podemos alterar o proprietário fazendo isto:

 # chown -R $USER:$USER /var/www/site1.com.br/public_html
 # chown -R $USER:$USER /var/www/site2.org.br/public_html

A variável $USER terá o valor do usuário com o qual você está logado atualmente quando você pressionou "ENTER". Fazendo isto, nosso usuário regular agora detém os sub-diretórios public_html onde estaremos armazenando nosso conteúdo.

Devemos também modificar um pouco nossas permissões para garantir que o acesso de leitura é permitido para o diretório web em geral e todos os arquivos e pastas que ele contém de modo que a páginas possam ser servidas corretamente:

 # chmod -R 755 /var/www/*

Seu servidor web agora deve ter as permissões que ele precisa para servir o conteúdo, e seu usuário deve ser capaz de criar conteúdo dentro das pastas necessárias.

Configurações do Virtual Host

Arquivos de virtual host são arquivos que especificam a configuração real do nosso virtual host e determina como o servidor web Apache irá responder às várias requisições de domínio.

O Apache vem com um arquivo padrão de virtual host chamado 000-default.conf que podemos usar como ponto de partida. Vamos copiá-lo para criar um arquivo de virtual host para cada um de nossos domínios.

Vamos começar com um domínio, configurá-lo, copiá-lo para nosso segundo domínio, e então fazer os pequenos ajustes necessários. A configuração padrão do Debian requer que cada arquivo de virtual host termine em .conf. Começe copiando o arquivo para o primeiro domínio:

 cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site1.com.br.conf

Abra o novo arquivo em seu editor (exemplo com nano):

 # nano /etc/apache2/sites-available/site1.com.br.conf

O arquivo será algo parecido com isso (eu removi os comentários aqui para tornar o arquivo mais acessível):

 <VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>

Como você pode ver, não há muito aqui. Vamos personalizar os itens aqui para nosso primeiro domínio e adicionar algumas diretivas adicionais. Esta seção de virtual host corresponde a quaisquer requisições que são feitas na porta 80, a porta padrão HTTP.

Em primeiro lugar, precisamos alterar a diretiva ServerAdmin para um e-mail que o administrador do site possa receber e-mails por ele.

Depois disso, precisamos adicionar duas diretivas. A primeira, chamada ServerName, estabelece o domínio de base que deve corresponder à esta definição de virtual host. Este provavelmente será o seu domínio. A segunda, chamada ServerAlias, define outros nomes que devem corresponder como se fossem o nome de base. Isto é útil para a correspondência de hosts que você definiu, como www.

A outra coisa que precisamos mudar para o arquivo de virtual host básico é a localização do documento raiz para este domínio. Nós já criamos o diretório que precisamos, então precisamos apenas alterar a diretiva DocumentRoot.

No total, nosso arquivo de virtualhost deve ficar assim:

 <VirtualHost *:80>
   ServerAdmin admin@example.com
   ServerName site1.com.br
   ServerAlias www.site1.com.br
   DocumentRoot /var/www/site1.com.br/public_html
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>

Depois disso, ative os novos arquivos de Virtual Host. O Apache inclui algumas ferramentas que nos permitem fazer isto. Podemos utilizar a ferramenta a2ensite para ativar cada um de nossos sites assim:

 # a2ensite example.com.conf
 # a2ensite test.com.conf

E ATENÇÃO! Não precisa digital o caminho inteiro do arquivo .conf. Isso é coisa do nginx. Se você tentar a2ensite /etc/apache2/sites-available/test.com.conf vai dar errado!

Quando terminar, você precisará reiniciar o Apache para fazer com que estas alterações tenham efeito:

 service apache2 restart

Feito tudo certinho, deve funfar numa boa!

Referências