No nosso último post ensinamos a instalar o apache no windows e a configurá-lo minimamente para que páginas html possam ser servidas via localhost. Inclusive foram mostradas as diretivas de endereço e-mail do administrador do servidor, nome pelo qual o servidor se identificará e o diretório de documentos padrão do servidor.
Agora vamos ensinar a configurar o serviço do Apache para que ele possa ser configurado de forma mais profissional e produtiva. Nesta etapa de postagens sobre o Apache aprenderemos a configurar os "virtual hosts" ou "servidores virtuais" baseados em Nomes.
O termo servidor virtual refere-se à prática de executar mais de um site (como por exemplo site1.exemplo.com e site2.exemplo.com) em uma única máquina servidora. Servidores virtuais podem ser baseados em endereços IP, significando que você terá um endereço IP diferente para cada site, ou baseado em Nomes, significando que você terá múltiplos nomes sendo executados em cada endereço IP. O fato de que eles estão sendo executados no mesmo servidor físico ficará transparente, significando que não será perceptível.
Índice
- Pré-requisitos
- Servidor Virtual baseado em Nome
- Configurações
- Testando a Configuração
- Conclusão
Pré-requisitos
O único pré-requisito é que o servidor Apache esteja instalado na máquina e que você tenha permissão para visualizar e criar arquivos no diretório de instalação do apache.
Servidor Virtual Baseado em Nome
Servidores Virtuais, como já dito, podem ser baseados em IP e utilizarem o endereço ip da conexão para determinar o servidor virtual correto que será o responsável. Portanto, você precisará de mais de um endereço IP na máquina. Há também os servidores virtuais baseados em Nomes, sendo estes, o assunto da postagem. Nesse tipo de servidor virtual, o servidor conta com o cliente para reportar o nome do servidor como parte do cabeçalho HTTP. Utilizando esta técnica, vários hosts virtuais podem compartilhar o mesmo endereço IP.
Servidores Virtuais baseados em nome geralmente são mais simples, pois é preciso apenas configurar o servidor DNS para mapear cada nome para o endereço IP correto e então conigurar o Apache para reconhecer os diferentes nomes. Além de toda a simplicidade esse modelo de servidor virtual também resolve um outro problema que é a demanda por enderelos IP, que estão cada dia mais escassos.
Configurações
Para configurar os servidores virtuais é preciso apenas criar um bloco <VirtualHost> para cada servidor virtual diferente que você queira servir. Dentro de cada bloco <VirtualHost>, você precisará de no mínimo uma diretiva "ServerName" para designar qual servidor virtual será servido e uma direvita "DocumentRoot" para mostrar onde se encontra no sistema de arquivos o conteúdo para o servidor virtual.
No entanto, para que o servidor seja configurado da forma mais profissional possível, o ideal é que algumas diretivas globais do servidor sejam sobrescritas dentro de cada servidor virtual, e um servidor virtual seja criado para sobrescrever as configurações globais.
As diretivas como ServerAdmin, DocumentRoot, ServerName, ServerAlias, DirectoryIndex, ErrorLog, CustomLog e <Directory> caso sejam sobrescritas, permitem um melhor controle do servidor.
Vamos exemplificar para facilitar o entendimento, suponha que esteja servindo o domínio www.exemplo.com e você queira adicionar o servidor virtual www.outroexemplo.com o qual aponta para o mesmo endereço IP.
Neste exemplo, devemos criar um servidor virtual para o domínio www.exemplo.com e colocá-lo em primeiro lugar na listagem de servidores virtuais, e devemos criar um servidor virtual para o domínio www.outroexemplo.com. Assim, o servidor virtual do domínio www.exemplo.com será o servidor virtual padrão do servidor http.
Para configurar os servidores virtuais, você simplesmente deve adicionar o seguinte conteúdo para o arquivo httpd.conf: "Include conf/httpd-vhosts.conf". Coloque o conteúdo em negrito, sem aspas, como sendo a última linha no seu arquivo httpd.conf, conforme figura 1 abaixo.
Navegue até a pasta /conf dentro do diretório do Apache e crie o arquivo "httpd-vhosts.conf", conforme visto na figura 2 abaixo. Em seguida, abra o arquivo e crie um bloco <VirtualHost>. Neste bloco, preencha as diretivas ServerAdmin, DocumentRoot, ServerName, ServerAlias, DirectoryIndex, ErrorLog, CustomLog e <Directory>.
Figura 2 - Arquivo httpd-vhosts.conf
Para fins de exemplo, nosso arquivo httpd-vhosts.conf ficaria:
#bloco de servidor virtual para o domínio www.exemplo.com <VirtualHost 127.0.0.1:80> ServerAdmin webmaster@exemplo.com DocumentRoot c:/Apache24/htdocs/exemplo ServerName www.exemplo.com ServerAlias exemplo.com *.exemplo.com DirectoryIndex index.html ErrorLog logs/exemplo.com-error.log CustomLog logs/exemplo.com-access.log common <Directory "c:/Apache24/htdocs/exemplo"> AllowOverride All Order Allow,Deny Allow from all Require all granted </Directory> </VirtualHost> #bloco de servidor virtual para o domínio www.outroexemplo.com <VirtualHost 127.0.0.1:80> ServerAdmin webmaster@exemplo.com DocumentRoot c:/Apache24/htdocs/outroexemplo ServerName www.outroexemplo.com ServerAlias outroexemplo.com *.outroexemplo.com DirectoryIndex index.html ErrorLog logs/outroexemplo.com-error.log CustomLog logs/outroexemplo.com-access.log common <Directory "c:/Apache24/htdocs/outroexemplo"> AllowOverride All Order Allow,Deny Allow from all Require all granted </Directory> </VirtualHost>
Abaixo temos uma breve explicação do que significa cada diretiva.
ServerAdmin: Endereço de e-mail do administrador do servidor virtual, utilizado em exibição de páginas geradas pelo próprio servidor http em caso de erro.
DocumentRoot: Endereço do diretório que contém os arquivos do site.
ServerName: Nome pelo qual o servidor atenderá requisições à este servidor virtual.
ServerAlias: Nomes pelos quais além do nome indicado no ServerName, o servidor virtual atenderá as requisições. Útil para permitir ao servidor virtual atender à requisições com ou sem o www.
DirectoryIndex: Arquivo a ser exibido em caso de a url não conter nenhum arquivo, apenas o nome do domínio. O arquivo configurado nesta diretiva deve estar contido no diretório especificado pela diretiva DocumentRoot.
ErrorLog: arquivo de log gerado para exibir erros durante a execução do servidor. O padrão é deixar que o caminho do arquivo comece pelo diretório log na pasta raiz do Apache.
CustomLog: arquivo geral de log do servidor. O padrão é deixar que o caminho do arquivo comece pelo diretório log na pasta raiz do Apache.
<Directory></Directory>: define regras de permissões de acessos à pastas do servidor virtual, deve ser configurado com o mesmo caminho da diretiva DocumentRoot.
Lembrando que cada nome de domínio especificado na diretiva VirtualHost, deve estar contido no arquivo hosts de cada máquina que requisitará o domínio ou estar cadastrado no servidor de DNS. Com isso, todas as requisições para o domínio exemplo.com serão servidas pelo servidor virtual www.exemplo.com, desde que o DNS esteja configurado corretamente, ou o arquivo hosts que fica em "C:/windows/system32/drivers/ect/" esteja configurado de acordo, conforme figura 3 abaixo.
Figura 3 - Arquivo hosts configurado
A partir deste ponto, quando uma requisição chegar, o servidor http primeiro fará a checagem se a requisição casa com algum endereço definido em algum servidor virtual. Se casar, o servidor http então irá procurar em cada <VirtualHost> e tentará encontrar algum onde as diretivas ServerName ou ServerAlias casem com o nome de servidor requisitado. Caso algum servidor virtual seja encontrado, o servidor http, servirá a requisição utilizando a configuração definida no primeiro bloco <VirtualHost> encontrado. Caso nenhum servidor virtual contenha as diretivas ServerName ou ServerAlias que casem com o nome procurado na requisição, o servidor http, servirá a requisição com o primeiro servidor virtual que casar com o IP procurado. Por isso, o primeiro servidor virtual listado se torna o servidor virtual padrão do servidor http.
Testando a Configuração
Para testar as configurações realizadas, vamos criar dois sites, um para cada domínio (exemplo.com e outroexemplo.com). Isto pode ser feito criando duas pastas para condizer com as diretivas "DocumentRoot" e "Directory" de cada servidor virtual de exemplo, conforme figura 4 abaixo.
Figura 4 - Nomes das pastas criadas
Em cada uma destas pastas que hospedarão os nossos sites, crie um arquivo html chamado "index.html". Na pasta exemplo, deve ser criado um arquivo html contendo o seguinte conteúdo: <html><body><h1>It works: Exemplo!</h1></body></html>.
Na pasta outroexemplo, deve ser criado um arquivo html contendo o seguinte conteúdo: <html><body><h1>It works: Outro Exemplo!</h1></body></html>.
A figura 5 abaixo exibe as duas pastas criadas e os arquivos index.html dentro de cada pasta.
Figura 5 - exibição do conteúdo das pastas exemplo e outroexemplo
Agora, basta colocar o servidor apache para ser executado, o que pode ser feito de duas formas. Ou dando dois cliques no arquivo "httpd.exe" ou digitando "cd:/apache24/bin/httpd.exe" no prompt de comandos do windows. Após startar o serviço do apache, basta digitar os endereços configurados no DNS ou no arquivo hosts para verificarmos que o servidor apache está servindo as requisições corretamente. No nosso caso basta digitarmos exemplo.com ou www.exemplo.com para o servidor servir o domínio www.exemplo.com, conforme pode ser visto na figura 7 abaixo, já a figura 8 mostra que o mesmo vale para o domínio www.outroexemplo.com.
Figura 6 - Domínio www.exemplo.com funcionando com o alias exemplo.com
Figura 7 - Domínio www.outroexemplo.com funcionando com o alias outroexemplo.com
Conclusão
Conforme podemos ver nesta postagem, o conceito de servidores virtuais do apache é muito útil quando temos que usar um único servidor para servir mais de um domínio. Podemos perceber também que o apache oferece uma configuração bem robusta permitindo que os administradores deixem os domínios configurados de forma bastante separada, para que uma configuração não interfira com a outra. Um ponto muito importante a ser notado é que a configuração de nomes de domínios a serem servidos devem obrigatoriamente estar configurados no DNS ou no arquivo hosts de cada máquina cliente que fará requisições ao servidor.
Até a próxima, onde falaremos de compactação de output de requisições do apache, melhorando em muito o tráfego de rede.
Nenhum comentário:
Postar um comentário