25 de outubro de 2020 - Frederico Marinho

Como configurar Apache Virtual Hosts no Ubuntu 20.04

Uma das configurações básicas para quem trabalha com o Apache como servidor web é criar os virtual hosts, que é um recurso do servidor de separar cada projeto em um domínio personalizado distinto, permitindo uma simulação mais perto da real de um servidor de produção.

Além disso, falando num servidor de produção em si como em uma máquina da Amazon AWS por exemplo, o recurso de Virtual Hosts é que permite você ter vários sites hospedados no mesmo servidor, respondendo a diferentes domínios apontados para diferentes pastas (ou para mesma pasta no caso de um alias).

Pré-requisitos

Obviamente, para fazer a configuração do Virtual Hosts, é preciso que o servidor Apache já esteja instalado e configurado no computador. Nesse blog já tenho diversas publicações que explicam como fazer isso, sendo essa referente ao Ubuntu 20.04 a mais recente.

Basicamente, os passos são: Criar a estrutura de diretórios com as permissões corretas; criar o arquivo de configuração do Apache; habilitar o novo site; criar um arquivo index de teste e fazer a configuração do arquivo hosts. Vamos lá!

  1. Criar a estrutura de diretórios

Por padrão, o Apache utiliza a pasta /var/www como document root, base para seus projetos. Vamos manter esse padrão e criar uma subpasta para cada projeto lá dentro. E dentro da pasta de cada projeto, vamos criar uma subpasta public_html onde estarão todos os arquivos, para manter o mesmo padrão de servidores de hospedagem.

Por exemplo, vou criar duas pastas, uma para cada projeto (que vou chamar de site1 e site2) e dentro as pastas public_html.

sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html

As partes em negrito serão os domínios de cada site.

  1. Permissões nas pastas

Ao criar as pastas com o comando SUDO, automaticamente elas têm como dono o usuário root. Para que o usuário logado tenha acesso a pastas precisamos dar as permissões corretas. A primeira é adicionar o usuário do Apache ao grupo do usuário que está logado:

sudo usermod -a -G www-data $USER

Altere o proprietário a nível de grupo da pasta /var/www e seu conteúdo para o grupo do Apache:

sudo chown -R $USER:www-data /var/www

A variável $USER representa o usuário que está logado no momento em que os comandos forem executados. Agora precisamos modificar as permissões para garantir que o usuário tenha acesso irrestrito (escrita e leitura) aos arquivos e que a nível de grupo possa ler e executar os arquivos:

sudo chmod -R 775 /var/www

Assim você garante que outros usuários consigam ver seus arquivos (acessar o site) e seu usuário tenha acesso de escrita.

  1. Criar uma index para teste

Para testarmos nossos sites depois de configurados, vamos criar um arquivo index.html e colocar em cada uma das pastas. Terá um código simples, apenas mesmo para conferirmos o resultado de tudo. Um exemplo:

<html>
  <head>
    <title>Site1 funciona!</title>
  </head>
  <body>
    <h1>Sucesso!</h1>
  </body>
</html>

Abra seu editor de códigos preferível, cole o código acima e salve nas pastas dos projetos. Você pode manter o mesmo código para as duas pastas, sinta-se a vontade de alterar se preferir.

Eles ficarão nessa pasta:

/var/www/site1.com/public_html/index.html
/var/www/site2.com/public_html/index.html
  1. Criar os arquivos Virtual Host

Agora sim vai começar o trabalho pesado.

Os arquivos que definem o Virtual Host são responsáveis por definir a configuração de cada domínio. O Apache já vem com um arquivo padrão e vamos copiá-lo para aproveitá-lo como ponto de partida. Os arquivos do Virtual Host ficam na pasta /etc/apache2/sites-available/000-default.conf. Execute o comando:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site1.com.conf

Vamos editar o novo arquivo com permissão root:

sudo gedit /etc/apache2/sites-available/site1.com.conf

O arquivo original vai ter mais ou menos esse formato (eu removi todos os comentários para facilitar):

<VirtualHost *:80>
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/html
 
   Alias /phpmyadmin "/usr/share/phpmyadmin/"
   <Directory "/usr/share/phpmyadmin/">
      Order allow,deny
      Allow from all
      Require all granted
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Vamos personalizar para funcionar para nosso site1. Deverá ficar como o modelo abaixo:

<VirtualHost *:80>
   ServerName site1.com
   ServerAlias www.site1.com
   ServerAdmin admin@site1.com
   DocumentRoot /var/www/site1.com/public_html

   <Directory "/var/www/site1.com/public_html">
     Options Indexes FollowSymLinks MultiViews
     AllowOverride All
     Require all granted
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

A primeira alteração foi a adição da linha ServerName:

ServerName site1.com

Essa linha corresponde ao domínio associado à esse Virtual Host. ServerAlias é um apelido, um outro endereço associado (ou vários) que levarão o usuário para o mesmo destino.

ServerAlias www.site.com

Colocar o email do administrador que receberá informações do domínio.

ServerAdmin admin@site1.com

A linha que corresponde ao diretório onde estarão os arquivos do site em questão. DocumentRoot deve indicar a pasta criada anteriormente.

DocumentRoot /var/www/site1.com/public_html

O bloco Directory tem a ver com permissões do Apache na leitura da pasta e a possibilidade de rescrever a URL, necessário para habilitar o mod_rewrite, popularmente conhecido como “URLs amigáveis”. Se você não conhece sobre URLs amigáveis, veja esse post.

As duas últimas linhas são relacionadas ao LOG, onde serão inseridas informações de erros, warnings, etc.

Faça agora uma cópia do arquivo configurado para ser usado pelo site2. Execute o comando:

sudo cp /etc/apache2/sites-available/site1.com.conf /etc/apache2/sites-available/site2.com.conf

Editar o arquivo e faça as personalizações necessárias, como fizemos com o site1.

  1. Ativar os novos arquivos Virtual Host

Depois de criados, os arquivos Virtual Host precisam ser ativados no Apache para que respondam pelos domínios associados. Execute os comandos:

sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf

Será necessário reiniciar o Apache:

sudo service apache2 restart
  1. Configurar o arquivo Host do servidor local

Se você tentar acessar os sites agora pelo navegador, provavelmente não funcionará. É preciso “avisar” o servidor local que os arquivos relacionados a esses domínios estão configurados localmente, para que eles não sejam buscados na internet.

Basta editar o arquivo /etc/hosts:

sudo gedit /etc/hosts

Se você ainda não tiver editado esse arquivo anteriormente, você verá duas linhas iniciais parecidas com essas:

127.0.0.1 localhost
127.0.1.1 divera-hp

Onde, no meu caso, divera-hp é o nome do meu computador na rede. 127.0.1.1 é IP correspondente ao localhost, ou seja, o próprio computador.  Basicamente, o que será preciso fazer é, adiciona duas linhas, uma para cada site, logo abaixo dessa segunda. No meu caso, ficaria assim:

127.0.0.1 localhost
127.0.1.1 divera-hp
127.0.1.1 site1.com
127.0.1.1 site2.com

Salve o arquivo e vamos testar!

  1. Testando o virtual host

Basta agora abrir o navegador e entrar com os endereços que configuramos para responderem no Virtual Host:

http://site1.com

Você deverá ver escrito “Sucesso!” na tela, já que foi esse o conteúdo do arquivo index.html que colocamos na pasta. O mesmo deve aparecer para o site2, ao entrar com o endereço:

http://site2.com
  1. Erro de permissão

Para cada nova pasta de projeto inserida em /var/www faça os comandos abaixo:

sudo chmod -R 775 /var/www/site1.com
sudo chown -R $USER:www-data /var/www/site1.com

Se deu tudo certinho, você conseguiu acessar os 2 sites no mesmo servidor, apenas tendo um arquivo Virtual Host para cada um.

12

Linux / Servidor web / Ubuntu

Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *