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:
https://httpd.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 '.httpaccess' 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 'http://bliblioteca.empresa.local', acessará o site/sistema 'biblioteca' em '/var/www/html/biblioteca/public';
- Se o usuário indicar 'http://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 'http://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!