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: 8.685 ]

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

Automatizando relatórios GLPI usando PHP e Shell Script

PROXMOX Overview - Virtualização Leve e Eficiente

Leitura recomendada

AutoCAD 2007 vs. DraftSight v1r3.1 2013

Pipelight Flash vs. Fresh Player vs. Adobe Flash nativo vs. Pepper Flash nativo

KDE4 junto com KDE3 no Debian Lenny

Convertendo .AVI para VCD de forma fácil e rápida

Instalando o Android SDK na plataforma Linux

  
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 RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts