APACHE – COMPARTILHAMENTO DE RECURSOS – VIRTUALHOSTS

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 .httpsaccess 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 “https://meusite.com.br”, redirecione a requisição pra pasta “meusite/”;
  • Se o usuário indicar a URL “https://projeto.com.br”, redirecione, então, para “projeto/public”;
  • Se o usuário indicar a URL “https://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: httpss://httpsd.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.

DIRETRIZES DO APACHE, VIRTUALHOST

 

Conforme visto anteriormente, as configurações de site no Apache se dão por meio do uso das diretrizes de configuração da ferramenta. O pessoal da Apache Software Foundation disponibiliza a documentação destas no seguinte link: httpss://httpsd.apache.org/docs/2.4/mod/directives.html

Dentre todas as diretrizes disponíveis, vamos nos atentar à VirtualHost, apresentada anteriormente, e à Directory, que é usada para determinar configurações em um diretório específico.

A diretriz ‘VirtualHost’ deve usada sempre que for referenciar um endereço de site, ou seja, um endereço DNS. Para cada configuração de site é necessário criar um arquivo de configuração para o mesmo. “Mas, Lucas, não só ‘jogar’ a pasta lá em ‘/var/www/html’ e acessar usando ‘ip/site’?” Isso funciona e dependendo da ocasião, isso atende bem, mas, em nosso caso, só adicionar as pastas não bastaria.

Continuando, precisamos criar os arquivos ‘biblioteca.conf’ e ‘panificadora.conf’, ambos no diretório ‘/etc/apache2/sites-available’, assim como o arquivo de configuração default mostrado anteriormente. Um detalhe aqui é que os arquivos não precisam ter o nome do projeto que ele referencia, mas será muito mais fácil dar suporte e manutenção se estes receberem o mesmo nome que o seu site/sistema, tendo em vista que você pode configurar quantos sites o hardware do seu servidor suportar processar. Criados os arquivos, o conteúdo destes deverá ficar assim:

biblioteca.conf:

<VirtualHost *:80>
ServerName biblioteca.empresa.local

<Directory /var/www/html/biblioteca/public>
AllowOverride All
</Directory>

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

panificadora.conf:

<VirtualHost *:80>
ServerName panificadora.empresa.local

<Directory /var/www/html/panificadora>
AllowOverride All
</Directory>

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

Onde:

  • ServerName -> Nome do site/sistema, que pode ser o mesmo nome do servidor. Aqui é configurado o DNS que vai referenciar o servidor na URL;
  • panificadora.empresa.local / biblioteca.empresa.local -> DNS que será usado;
  • <Directory /var/www/html/biblioteca> ou <Directory /var/www/html/panificadora> -> É a diretriz que referencia qual é o diretório do site/sistema. Nela devem conter as ‘regras’ para aquele diretório;
  • AllowOverride -> Diretriz que possibilita a reescrita de configurações para o diretório especificado usando, por exemplo, um arquivo ‘.httpsaccess’ na raiz do diretório em questão.

Obs.: o DNS informado deve estar devidamente registrado para o IP do servidor.

Feito isto, precisamos habilitar estas configurações, tendo em vista que isto não é feito automaticamente. Para tal, precisamos usar os comandos:

# a2ensite biblioteca.conf
# a2ensite panificadora.conf

Você será notificado se tudo correu bem e, neste caso, será orientado a recarregar o serviço do Apache usando o comando

# service apache2 reload

Obs.: caso queira desabilitar uma configuração de site use o comando ‘a2dissite arquivo_de_configuração’, por exemplo: ‘a2dissite biblioteca.conf’. Da mesma forma, o serviço do Apache deverá ser recarregado.

Um detalhe bem interessante sobre o funcionamento da ferramenta pode ser observado agora. Se você listar os arquivos contidos no diretório ‘/etc/apache2/sites-enabled’, verá links para os arquivos de configuração criados em ‘/etc/apache2/sites-available’. “Lucas, consigo fazer esse processo manualmente então?” Sim, como boa parte das coisas que podemos fazer no Linux.

Neste ponto, parte da solução já foi implementada. Já é possível acessar os sites de acordo com o endereço informado conforme o exemplo:

  • Se o usuário indicar ‘https://bliblioteca.empresa.local’, acessará o site/sistema ‘biblioteca’ em ‘/var/www/html/biblioteca/public’;
  • Se o usuário indicar ‘https://panificadora.empresa.local’, acessará, de forma semelhante, ‘panificadora’ em ‘/var/www/html/panificadora’.

Mas, por exemplo, se eu quiser acessar ainda, um outro site/sistema ou um subsistema do meu projeto referenciando com ‘/subsistema’ no final de uma URL específica? Exemplificando pra ficar mais claro:

Temos os sites ‘biblioteca’ e ‘panificadora’, mas também tenho instalado o PhpMyAdmin no servidor e quero acessar ele usando “caminhos” distintos para o sistema ‘biblioteca’, até para não usar o padrão ‘/phpmyadmin’.

Estes “caminhos” podem ser referenciados nos arquivos de configuração usando a diretriz ‘Alias’ do Apache. Sua implementação é extremamente simples. Ainda no exemplo, adotemos que para acessar o PhpMyAdmin usando o endereço do site biblioteca eu queria usar o alias “bibliotecaAdm”, o arquivo de configuração deverá ficar assim:

biblioteca.conf:

<VirtualHost *:80>
ServerName biblioteca.empresa.local

Alias /bibliotecaAdm /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
AllowOverride All
</Directory>

<Directory /var/www/html/biblioteca/public>
AllowOverride All
</Directory>

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

Desta forma, após salvar o arquivo e recarregar novamente o serviço do Apache, será possível acessar a ferramenta PHPMyAdmin usando o endereço ‘httpss://biblioteca.empresa.local/bibliotecaAdm’. Fácil, não?

Obs.: neste caso específico da ferramenta PHPMyAdmin também é possível alterar essa configuração de alias em ‘/etc/apache2/config-enabled/phpmyadmin.conf’, porém, muito cuidado!

CONCLUSÃO

Este artigo é mais um que descreve uma das várias formas de se administrar recursos e ferramentas no Linux e é bem provável que seja possível realizar as mesmas configurações de forma diferente e até, implementando soluções diferentes, como mencionado no início do artigo.

A minha apreciação por programação assim como a liberdade prevista pela “Filosofia do Software Livre” se dá pelo infinito número de possibilidades para solucionar e facilitar tarefas cotidianas.

Esta foi a forma mais simples que encontrei – com algumas horas de pesquisa – para solucionar o “problema” relatado no início do artigo. Se você conhece uma solução melhor ou notou que esqueci algum detalhe, deixe seu comentário, colabore!

O conhecimento cria oportunidades e jamais deve ser desprezado!!!

Até logo!

Rolar para cima