Apache - Compartilhamento de Recursos - VirtualHosts

O presente artigo tem como objetivo principal elucidar brevemente o leitor a respeito da diretiva "VirtualHost" do Apache Web Server e possibilidade de configuração de múltiplos sites/sistemas usando uma única instalação da ferramenta, possibilitando o uso de domínios ou subdomínios distintos sem o envolvimento de outras ferramentas e soluções. Um exemplo simples de um ambiente assim, é a hospedagem da versão de desenvolvimento e da versão de produção/versão "final" de um site ou sistema em um único servidor usando endereços DNS diferentes.

[ Hits: 2.752 ]

Por: Lucas Roberto Daldegan em 09/05/2018 | Blog: http://lucasroberto.com


Instalação e Configurações do Apache



Recentemente me deparei com uma necessidade incomum em minha breve, mas ativa, carreira de desenvolvedor/suporte. Eu estava envolvido em alguns projetos distintos que precisavam ser disponibilizados para testes antes do uso efetivo das ferramentas, todos na mesma época e usando estruturas de pastas diferentes entre si.

A princípio, a resolução deste "problema" é simples, hospedar estes projetos em servidores diferentes ou jogar todos estes projetos no Document Root do Apache e referenciar os diretórios pela URL. Ok, funcionaria, mas, na ocasião, era necessário informar domínios diferentes para cada projeto.

Então, para que fique mais claro, o cenário era o seguinte:
  • Apenas um servidor para hospedar os projetos;
  • Projetos com estrutura de pastas diferentes;
  • Necessidade de uso de domínios diferentes para acessar cada projeto.

Na época encontrei diversas dicas como "crie um arquivo .httpaccess na raiz do seu projeto...", "altere o arquivo do framework X, caso seu projeto use esse framework...", alguns como "crie um arquivo PHP com essa classe aqui..." e alguns engenhosos recomendando o cadastro regras de NAT do IPTables para usar portas diferentes e passar o link especificando a porta. Todas estas sugestões funcionariam? Sim, algumas demandando mais tempo, outras menos, mas, em minha opinião, nenhuma era a ideal.

Então, como resolver? A maioria das pessoas que conheço -me incluo aqui-, talvez pela facilidade de instalação e uso básico do Apache ou mesmo por ser uma situação incomum em ambientes pequenos, configurar mais de um site por servidor, "lê" guias de instalação do Apache e não se dão conta de que é possível hospedar diversos sites usando uma única instalação do Apache.

Basicamente, o que faremos é fazer com o que o Apache "leia" a URL e decida o que fazer de acordo com o endereço informado. Por exemplo:
  • Se o usuário indicar a URL "http://meusite.com.br", redirecione a requisição pra pasta "meusite/";
  • Se o usuário indicar a URL "http://projeto.com.br", redirecione, então, para "projeto/public";
  • Se o usuário indicar a URL "http://projeto.com.br/admdb", redirecione para o diretório do PHPMyAdmin, que não tem nada a ver com o diretório "projeto".

Primeiro passo: entender minimamente o funcionamento do Apache e realizar sua instalação.

A documentação da versão 2.4 do Apache, última versão disponível no momento de edição do artigo, pode ser encontrada aqui: https://httpd.apache.org/docs/2.4/

Quanto a instalação da ferramenta, usando Debian 9, por mero exemplo, basta usar o comando:

# apt-get install apache2

Este deve ser executado com permissões administrativas.

Após concluído o processo de instalação, navegue até o diretório '/var/www/html/', este é o diretório padrão do Apache, o famoso "DocumentRoot" da ferramenta. Os diretórios de projetos serão adicionados aqui para fins didáticos, mas fique a vontade para configurar seu ambiente como bem entender.

Copiados os diretórios para o DocumentRoot default do Apache, teremos então a seguinte estrutura:

/var/www/html/biblioteca
    /var/www/html/biblioteca/public
        /var/www/html/biblioteca/public/css/style.css
        /var/www/html/biblioteca/public/js/js.js
        /var/www/html/biblioteca/public/imagens/foto.png
    /var/www/html/biblioteca/documentos
        /var/www/html/biblioteca/documentos/readme.md

/var/www/html/panificadora
    /var/www/html/panificadora/foto.jpg
    /var/www/html/panificadora/js.js
    /var/www/html/panificadora/index.html
    /var/www/html/panificadora/login.html
    /var/www/html/panificadora/style.css

Dito isto, vamos nos atentar agora às configurações do Apache:

Atenção aqui! Em '/etc' há o diretório de configuração do Apache, '/etc/apache2'.

Vamos nos atentar somente a uma pasta, a 'sites-available'. Dentro dela, por padrão, haverá um arquivo de configuração de site nomeado '000-default.conf'. Se você abri-lo para leitura ou edição, se deparará com este conteúdo, que, excluindo os comentários, é o seguinte:

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Estas são as configurações do site '000-default', sendo:
  • <VirtualHost *:80> -> Referencia o VirtualHost do site em questão, ou seja, uma referência de configurações para as informações de site contidas nesta diretiva;
  • ServerAdmin -> Diretiva que serve para informação do administrador/dono do site;
  • DocumentRoot -> Diretiva que referencia a raiz do site, ou seja, onde os arquivos referentes ao site estão armazenados no servidor;
  • ErrorLog e CustomLog-> São diretivas que informam quais serão os arquivos de log referente ao site em questão;
  • ${APACHE_LOG_DIR} -> É uma variável de ambiente que referencia o diretório de logs do Apache.

Diante deste arquivo de configuração já fica fácil deduzir a resolução do problema. Falaremos dela na próxima página.

    Próxima página

Páginas do artigo
   1. Instalação e Configurações do Apache
   2. Diretrizes do Apache, VirtualHost
Outros artigos deste autor

PROXMOX Overview - Virtualização Leve e Eficiente

Automatizando relatórios GLPI usando PHP e Shell Script

Leitura recomendada

S1 Ponto: Sistema de controle de ponto Open Source para Linux (Ubuntu)

CACIC - Configurador Automático e Coletor de Informações Computacionais

Implementando rotas estáticas no Linux com route

Systemimager - O sistema de imagens do Linux

Criação de DVDs com o videotrans

  
Comentários
[1] Comentário enviado por jeffersonmartins em 11/05/2018 - 11:23h

Parabéns pelo artigo!!

Talvez uma dica interessante para alguns é separar os logs por cada domínio a nível de debug:

ErrorLog "/path/projeto/logApache.log"
LogLevel debug

Assim terá um maior controle de logs sobre cada dominio apontado, seja erros de permissão e outros...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts