Logotipo do CataBits

CataBits

A máquina movida à bits

Desenvolvendo vários sites no Apache

Por André Luferat em 04/11/2019.

Se você cria aplicativos Web em PHP e MySQL, certamente usa o Apache como servidor Web, instalado em um computador local, para desenvolver seus produtos antes de publicá-los na Internet. O Apache é o "webserver" mais popular da Internet já faz um bom tempo, e, apesar de ter suas origens nos sistemas Unix, é portado para diversas plataformas modernas. No Apache temos basicamente o "diretório raiz" do site, sob o qual devem ficar todos os arquivos e subdiretórios do site e, principalmente a página "index.php". No caso do XAMPP, esse diretório é o "htdocs".

Logotipo do XAMPPLogotipo do WampServerLogotipo do USB WebserverLogotipo do EasyPHP

Quem desenvolve, obviamente trabalha em vários sites, de vários clientes e fica inviável ter um servidor Web para cada "case". O resultado é que criamos um diretório para cada projeto dentro do diretório raiz do site. Até aí, ok! O problema começa quando precisamos acessar o site que está sendo editado, via navegador, pelo endereço http://localhost/ padrão das plataformas AMP (Apache, MySQL e PHP).

Todos os exemplos seguintes serão baseados no XAMPP para Windows (Sim! Sou um porco capitalista!). Se você usa o Apache noutro pacote ou plataforma, adpte seu case.

Finge que "localhost" é "example.com"...

Um servidor Web está para nosso provedor de hospedagem, assim como o endereço http://localhost/ está para o endereço do nosso site na Internet, como por exemplo http://example.com/. Se pensarmos desta forma - que é a correta -, ao acessar o site do seu cliente do "PetShop" pelo servidor Web local, você digita no navegador http://localhost/petshop/, correto? Já que você salva os arquivos deste site no diretório raiz ("htdocs" do XAMPP).

Acontece que todos os sites, na verdade, são referênciados como um só: http://meusite.com.br/; e eles são subdiretórios deste site. Daí, quando você transferir o site do "PetShop", por exemplo, do servidor Web para o provedor de hospedagem lá na Internet? O endereço do site ficará http://petshot.com.br/petshop/? E como ficaram os caminhos dos seus atributos link, href e src?

Eu, pessoalmente, prefiro usar caminhos absolutos nos meus sites, onde a / representa a raiz do site. Por exemplo, para fazer um link para a home page (index.php), basta codificar:

<a  href="/">HOME</a>

Isso vale para qualquer página do site, mesmo aquelas que estão dentro de subdiretórios.

E para mostrar o logotipo, em QUALQUER página do site:

<img  src="/img/logo.png"  alt="Logotipo">

Isso funcionaria se você armazenasse o site diretamente na pasta raiz do servidor, normalmente na pasta htdocs ou www, dependendo do ambiente, mas não é o que acontece. Se você desenvolveu o site em um subdiretório "PetShop" do diretório raiz, por exemplo, para criar um link para a home page você teria que usar caminhos relativos e fazer algo como:

<a  href="../index.php">HOME</a>

E para o logotipo de uma página qualquer que está em um subdiretório, por exemplo, poderíamos ter algo como:

<img  src="../../img/logo.png"  alt="Logotipo">

Percebeu as diferenças?

Solução 1) Uma raiz para cada site

Quando eu percebi que a metodologia de vários subdiretórios dentro da raiz não daria certo, criei uma alternativa: passei a ter um diretório htdocs para cada site. Assim, no XAMPP, que é o pacote que uso, tinha vários diretórios, como:

  • C:\xampp\htdocs\petshop.com.br
  • C:\xampp\htdocs\sexshop.com.br
  • C:\xampp\htdocs\bardozizinho.com

Criei uma rotina louca: quando vou trabalhar no site "petshop.com.br", por exemplo, renomeio o diretório C:xampphtdocs petshop.com.brpara C:xampphtdocs, que o Apache reconhece como a raiz do site no XAMPP...

Agora, preciso trabalhar no "bardozizinho.com"? Renomeio então C:xampphtdocs para C:xampphtdocs petshop.com.br novamente e então C:xampphtdocs bardozizinho.com para C:xampphtdocs. E o site do "bardozizinho.com" está no ar...

Entendeu a dinâmica? Complicado, mas, pra ganhar ($) dinheiro, agente se adapta!

Solução 2) Subdomínios com Wildcard

Todo esse troca-troca de nomes de diretórios pode se tornar cansativo, e se você está cansado + estressado, pode acabar cometendo erros como salvar o "SexShop" no lugar do "PetShop", entregando assim o produto errado para o cliente. Vich!

Foi daí que, um belo dia, dando algumas aulas de servidor Web com Apache, me lembrei que esse poderoso Webserver suporta subdomínios, redirecionamentos e "Wildcards". E, quem é o nosso servidor Web favorito? Sim, justamente o Apache!

Voltamos à situação anterior, onde cada site ocupa um subdiretório da raiz (htdocs...), só que agora, assim:

  • C:\xampp\htdocs\petshop
  • C:\xampp\htdocs\sexshop
  • C:\xampp\htdocs\bardozizinho

Depois de configurar o Apache, para acessar cada site com seu próprio domínio, usamos:

  • http://petshop.localhost/
  • http://sexshop.localhost/
  • http://bardozizinho.localhost/

Cada site agora tem seu prório endereço na forma de um subdomínio independente e também sua própria "raiz" no servidor Web, então, podemos voltar usar caminhos absolutos nos links.

A configuração é razoavelmente simples e só precisa ser feita uma vez:

Abra o arquivo de configuração do "Apache" em um editor. Esse arquivo, normalmente se chama httpd.conf e costuma ficar no subdiretório C:xamppapacheconf, no caso do XAMPP do Windows. Se você é "estranho" e não usa o XAMPP ou o Windows, procura este arquivo dentro do diretório do seu servidor Web, que vai encontrá-lo.

Com ele aberto, localize a linha abaixo e descomente-a removendo o # que está no começo. Ficará assim:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

Também localize e remova o # do começo da linha:

Include conf/extra/httpd-vhosts.conf

Agora, localize e abra o arquivo httpd-vhosts.conf que normalmente fica dentro do diretório C:xamppapacheconfextra. Com ele aberto, apague todo o seu conteúdo, substituindo por:

UseCanonicalName Off
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>
    ServerAlias *.localhost
    VirtualDocumentRoot "C:/xampp/htdocs/%1/"
</VirtualHost>

Salve e feche os arquivos abertos e reinicie o Apache, conforme seu sistema permitir.

E... Pronto!

Vários sites no Papache

Dicas finais

Os Subdomínios com Wildcard funcionam em qualquer compilação do Apache em que o módulo mod_vhost_alias esteja presente, o que é a maioria dos casos. Mesmo se você não usa um pacote AMP, preferindo instalações stand-alone dos serviços "Apache", "MySQL" e "PHP", a dica funciona. Agora mesmo, estou testando no Debian Linux 10 (sim, sou estranho!) e funciona perfeitamente.

Categorias: Back-endDevOps

Comentários