Apache - configurando domínios com vhost

De Pontão Nós Digitais
Revisão de 16h51min de 15 de junho de 2015 por Felipecabral (discussão | contribs)

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

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