Depois de algumas pessoas nos questionarem sobre certas sugestões em nossos posts quando vamos configurar um servidor Apache (específicamente porque criamos uma pasta “blank“) resolvemos escrever este post para explicar o que é um VirtualHost e por que ele é tão importante em ambientes, ou aplicações web.
O que é um Bind, ou um VirtualHost?
Nos servidores Web, um bind/VirtualHost é uma configuração que permite hospedar múltiplos sites diferentes. Normalmente feito com base no pedido de conexão (como site1.com
, site2.com
). Em outras palavras, essa configuração permite que você tenha vários sites funcionando separadamente em um mesmo servidor.
Imagine que você quer um servidor com as seguintes configurações de sites/conexões:
Se tentar conectar no nome | Deve abrir o conteúdo da pasta | e salvar o log de acesso em |
http://intranet.suaempresa.com | intranet.suaempresa.com | intranet.suaempresa.com-acess.log |
http://www.suaempresa.com | www.suaempresa.com | /var/log/httpd/www.suaempresa.com-acess.log |
http://moodle.suaempresa.com | moodle.suaempresa.com | /var/log/httpd/moodle.suaempresa.com-acess.log |
Veja que essa lista, acima, poderia ser feita para qualquer servidor Web (como IIS, Apache, pois não vamos falar ainda qual a pasta com os sites se C:\inetpub\logs\logfiles\ ou /var/www/html/httpd/ nem de logs, se C:\inetpub\logs\logfiles\ ou /var/log/httpd/). Apenas entenda que ter uma lista onde cada pasta é exatamente o nome do site que está configurado na conexão do servidor Web, vai facilitar a administração das conexões e do ambiente em si.
Além dessa configuração dita, também é possível configurar a conexão “padrão”, caso não esteja nessa lista acima (por exemplo, se eu tentar conectar no IP do servidor, sem específicar o nome). Por esse motivo ainda falaremos de uma segunda configuração abaixo.
Falando específicamente sobre o VirtualHost no Apache
O Apache trabalha com um arquivo de configuração .conf (no CentOS, o /etc/httpd/conf/httpd.conf), onde tem as configurações do site (timeout, pasta, etc.). As sugestões de alterações que fazemos são:
- Fazer essa configuração em todo o novo ambiente (antes dele poder ter outras configurações que podem gerar conflitos com as que sugerimos);
- Alterar a configuração do site inicial, para abrir uma pasta que deixaremos em branco (caso alguém tente abrir algum nome que não esteja na lista de conexões, como tentar o IP direto do servidor);
- Para isso apontamos para a pasta /var/www/html/blank e criamos essa pasta;
- Adicionar para ler todos os arquivos de configuração que estiverem na pasta conf.d (onde criaremos o arquivo /etc/httpd/conf.d/vhosts.conf)
- Criar o arquivo /etc/httpd/conf.d/vhosts.conf e cadastrar cada site (o bind de conexão, a pasta que deve abrir, o log a ser gerado de acesso e de erro e qualquer configuração específica desse site).
Seguindo o exemplo da tabela acima, de exemplo, faríamos o seguinte:
Para alterar a pasta default para blank, executamos os comandos:
mkdir -p /var/www/html/blank
touch /var/www/html/blank/index.html
chown -R apache.apache /var/www/html/blank
chmod -R 500 /var/www/html/blank
sed -i "s/\/var\/www\/html/\/var\/www\/html\/blank/g" /etc/httpd/conf/httpd.conf
E criaríamos o arquivo /etc/httpd/conf.d/vhosts.conf (comando vim /etc/httpd/conf.d/vhosts.conf
) com a seguinte configuração:
<VirtualHost *:80>
ServerName intranet.suaempresa.com
ServerAlias intranet
ServerAdmin suporte@suaempresa.com
DocumentRoot /var/www/html/intranet.suaempresa.com
ErrorLog "/var/log/httpd/intranet.suaempresa.com-error.log"
CustomLog "/var/log/httpd/intranet.suaempresa.com-requests.log" combined
</VirtualHost>
<Directory /var/www/html/intranet.suaempresa.com>
AllowOverride All
</Directory>
#----------------------------------------------------------------------------------
<VirtualHost *:80>
ServerName www.suaempresa.com
ServerAlias www
ServerAdmin suporte@suaempresa.com
DocumentRoot /var/www/html/www.suaempresa.com
ErrorLog "/var/log/httpd/www.suaempresa.com-error.log"
CustomLog "/var/log/httpd/www.suaempresa.com-requests.log" combined
</VirtualHost>
<Directory /var/www/html/www.suaempresa.com>
AllowOverride All
</Directory>
#----------------------------------------------------------------------------------
<VirtualHost *:80>
ServerName moodle.suaempresa.com
ServerAlias moodle
ServerAdmin suporte@suaempresa.com
DocumentRoot /var/www/html/moodle.suaempresa.com
ErrorLog "/var/log/httpd/moodle.suaempresa.com-error.log"
CustomLog "/var/log/httpd/moodle.suaempresa.com-requests.log" combined
</VirtualHost>
<Directory /var/www/html/moodle.suaempresa.com>
AllowOverride All
</Directory>
Caso queira configurações mais específicas, como restringir os IP’s de acesso apenas para sua rede interna, ou configurar uma conexão como HTTPS, você pode fazer dentro da cada VirtualHost. Lembrando de reiniciar o serviço quando terminar de configurar.
Conclusão
Usar VirtualHost no Apache é uma prática altamente recomendada para quem precisa rodar múltiplos sites ou manter um ambiente de desenvolvimento mais organizado. Com VirtualHosts bem estruturados vamos garantir a organização, segurança (isolamento), facilidade, flexibilidade e escalabilidade.
Mais Informações
Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.
Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.
