Apache, Linux

Tutorial de Apache – Parte 2 – VirtualHosts


Saudações a todos que desejam prosseguir com a capacitação no melhor servidor http de todos os tempos! Hoje continuamos nosso tutorial de apache com foco em uma sessão simples, porém vital para o funcionamento da ferramenta, os virtualhosts.

VirtualHosts são domínios virtuais configurados no apache, para que o mesmo servidor possa responder por diferentes domínios. Através das tags <VirtualHost> e  </VirtualHost> no arquivo de configuração, determinaremos qual o comportamento do apache para cada domínio.

Vamos colocar a mão na massa.

Como não possuímos um servidor DNS em nossa máquina virtual, vamos adicionar as seguintes entradas no arquivo hosts, domain1.com.br e domain2.com.br. Para fazer isso, vamos editar o arquivo de hosts:

vim /etc/hosts

Adicionamos as entradas :

127.0.0.1 domain1.com.br domain2.com.br

Basta salvar o arquivo e sair. Para testar, podemos pingar os domínios:

ping domain1.com.br
ping domain2.com.br

Se o ping respondeu, o ambiente já está OK. Vamos partir para a configuração do apache.

O arquivo de configuração principal do apache é o httpd.conf, vale a pena dar uma estudada geral neste arquivo e nos exemplos que temos comentados nele, pois é uma ótima fonte de aprendizado.

Vamos editar o arquivo httpd.conf

vim /etc/httpd/conf/httpd.conf

Precisamos localizar no arquivo a linha responsável pela ativação dos virtualhosts e retirar o comentário:


NameVirtualHost *:80

Examinando um pouco mais o arquivo de configuração, encontramos algumas linhas abaixo um exemplo perfeito de virtualhost:


#<VirtualHost *:80>
# ServerAdmin webmaster@dummy-host.example.com
# DocumentRoot /www/docs/dummy-host.example.com
# ServerName dummy-host.example.com
# ErrorLog logs/dummy-host.example.com-error_log
# CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>

Basta retirar o comentário deste exemplo, e adequá-lo aos nossos domínios:

<VirtualHost *:80>
 ServerAdmin admin@domain1.com.br
 DocumentRoot /var/www/html/domain1
 ServerName domain1.com.br
 ErrorLog /var/log/httpd/domain1_error
 CustomLog /var/log/httpd/domain1-access_log common
</VirtualHost>
<VirtualHost *:80>
 ServerAdmin admin@domain2.com.br
 DocumentRoot /var/www/html/domain2
 ServerName domain2.com.br
 ErrorLog /var/log/httpd/domain2_error
 CustomLog /var/log/httpd/domain2-access_log common
</VirtualHost>

Podemos examinar que foram criados dois virtualhosts diferentes, um respondendo pelo domínio domain1.com.br e outro respondendo pelo domain2.com.br. Cada virtualhost aponta para um document root diferente, e também possui logs separados dos arquivos padrão do apache, que são o access_log e o error_log.

Agora precisamos testar nossa configuração! Para isso, vamos criar fisicamente os document root no servidor:


mkdir /var/www/html/domain1
mkdir /var/www/html/domain2

E vamos popular estes diretórios com arquivos index diferentes:


echo "domain1" > /var/www/html/domain1/index.html
echo "domain2" > /var/www/html/domain2/index.html

Feito isto, precisamos de um passo muito importante e que muitas vezes é esquecido pelos administradores, rodar um configtest:


service httpd configtest

Se o resultado for OK, podemos prosseguir, senão, revise sua configuração pois existe algum  erro na mesma e, neste caso, o apache não conseguirá recarregar, resultando em indisponibilidade do serviço.

Para recarregar o apache:


service httpd reload

Agora tudo que precisamos fazer é abrir o Firefox da nossa máquina virtual, e testar as configurações no navegador:

domain1.com.br
domain1.com.br
domain2.com.br
domain2.com.br

Revisando, na parte de hoje do tutorial aprendemos a configurar os virtualhost para que um mesmo servidor apache possa responder por vários domínios. Não deixem de conferir a parte seguinte do tutorial, onde aprenderemos um pouco sobre mod_ssl, fazendo o apache trabalhar sobre https.

Também gostaria de lembrar que possuímos uma máquina virtual criada para este treinamento. Caso você não o tenha feito, leia também:

Tutorial de Apache – Parte 1

Até a próxima!

15 comentários sobre “Tutorial de Apache – Parte 2 – VirtualHosts

  1. Olá Fábio,
    Quando eu rodo o configtest tenho o seguite warn:

    [root@localhost ~]# service httpd configtest
    [Tue Mar 06 15:00:40 2012] [warn] _default_ VirtualHost overlap on port 80, the first has precedence
    Syntax OK

    O resultado é que só vejo a página do domain1 no firefox, independentemente do endereço que testo (domain1.com.br ou domain2.com.br).

    Onde está o erro?

    Att Sergio.

    Curtir

    1. Sergio,
      O que está acontecendo provavelmente é algum erro no virtualhost do domain2.com.br.
      O domain.com.br, como é o primeiro virtualhost, torna-se o padrão. Caso você chame por algum dominio pelo qual o apache não está respondendo corretamente, ele vai te redirecionar para o vh default, no caso, o domain1.com.br
      Recomendo também revisar o conteúdo dos arquivos index.html, para ter certeza que eles não estão com os conteúdos iguais.
      Estou a disposição!

      Curtir

    1. Juarez,
      A prova RHCE é focada em serviços e é bem chatinha sim. Tem a prova pré-requisito anterior que é a RHCSA que é focada em administração e um pouco mais light, mas as duas são práticas e o tempo é curto.
      Fiz as provas na própria RedHat, em São Paulo capital.
      Obrigado pela visita!

      Curtir

  2. Obrigado pelas respostas Fabio! Ainda sobre a prova, você fez algum tipo de treinamento? Sabe dizer mais ou menos o que cai na prova? O que você achou mais difícil?

    Abraço!

    Curtir

Deixe um comentário