O Apache é atualmente o servidor web mais amplamente utilizado no mundo. É um software de código aberto mantido pela The Apache Software Foundation. Em setembro de 2020, estimava-se que ele servia 36% de todo o tráfego de sites no mundo. Os desenvolvedores o adoram por sua velocidade, segurança, confiabilidade e robustez. Sua facilidade de personalização permite que ele atenda às necessidades de muitos ambientes por meio da instalação de extensões e módulos.
O Apache vem com um sistema de correspondência que você pode usar para hospedar múltiplos domínios ou sites usando uma única instalação do servidor Apache exposta em um único endereço IP. Os domínios ou sites são configurados em um dos arquivos de configuração do Apache definidos como hosts virtuais.
Cada domínio possui uma definição de host virtual com um diretório específico para o qual ele direciona. Quando um usuário visita um domínio, o servidor examina cada host virtual correspondente e seleciona qual deles usar para atender à solicitação do visitante, dependendo do nome de host inserido. Se nenhum nome de host correspondente for encontrado, o servidor usará o primeiro host virtual definido no arquivo conf como alternativa. O visitante acessará a página web solicitada sem saber que o mesmo servidor está servindo outros sites. Dependendo dos recursos que você possui em seu servidor e de quanto tráfego ele pode suportar, você pode hospedar quantos domínios desejar.
Neste tutorial, guiaremos você na configuração de hosts virtuais no Ubuntu 20.04 servidor.
Antes de mais nada
Para seguir este tutorial, você deve ter uma instalação do Ubuntu 20.04. Você também precisa criar um usuário não-root e fazer login com ele.
Os passos deste tutorial também exigem que você tenha o Apache instalado. Se ainda não o fez, pode instalá-lo usando os comandos abaixo. Você pode seguir o nosso tutorial de configuração do LAMP Stack – Linux Apache MySQL PHP para um guia de configuração mais detalhado.
|
1 2 |
sudo apt update sudo apt install apache2 |
Você deve ter nomes de domínio gratuitos ou pagos registrados em um registrador de domínios de sua escolha. Certifique-se de que os domínios apontem para o seu servidor configurando os registros DNS. No entanto, você ainda pode usar nossas configurações para seguir as etapas deste tutorial. Usaremos example.dev e mydomain.com para este tutorial. Você é livre para substituí-los pelos seus próprios. Se decidir usar os domínios de teste, os arquivos hosts no Apache deverão ser editados para lidar com os domínios. Abordaremos como fazer isso mais adiante no tutorial.
Passo 1 – Configurar os Diretórios do Site
Estes são os diretórios que contêm os dados do site que os visitantes do seu site acessarão. O diretório raiz de documentos do Apache que é acessível pela internet geralmente fica em /var/www. É aqui que criaremos os diretórios para os domínios individuais que queremos hospedar. Em cada um dos diretórios, adicionaremos o diretório public_html para conter os arquivos reais do site. O host virtual aponta para o diretório public_html. Isso oferece flexibilidade, pois você pode manter arquivos cruciais do site fora do public_html e colocar apenas arquivos públicos dentro dele.
Em seguida, insira os comandos abaixo para criar os diretórios. Lembre-se sempre de substituir os domínios de teste pelos seus domínios reais para as configurações subsequentes:
|
1 2 |
sudo mkdir -p /var/www/example.dev/public_html sudo mkdir -p /var/www/mydomain.com/public_html |
Passo 2 – Alterar as Permissões de Leitura e Escrita
Os comandos anteriores criaram a estrutura de diretórios, mas mantiveram a propriedade para o usuário root. Queremos que nosso usuário não-root tenha permissões completas de leitura e escrita nos diretórios. Também queremos que a web em geral tenha permissões de leitura.
Primeiro, altere a propriedade para o usuário não-root inserindo o seguinte comando:
|
1 2 |
sudo chown -R $USER:$USER /var/www/example.dev/public_html sudo chown -R $USER:$USER /var/www/mydomain.com/public_html |
A $USER é uma variável que assume as credenciais do usuário atualmente conectado. O usuário comum agora tem a propriedade do public_html. Em seguida, você precisa conceder permissões de leitura para a web em geral. O comando a seguir permite a permissão para todos os arquivos no diretório, garantindo que as páginas web sejam servidas corretamente:
|
1 |
sudo chmod -R 755 /var/www |
A partir da execução dos três comandos anteriores, seu site agora pode servir conteúdo. Além disso, seu usuário também pode criar conteúdo para ser servido nos diretórios específicos. Aqui você pode encontrar mais informações sobre permissões do Ubuntu.
Passo 3 – Criar Páginas de Demonstração nos Diretórios para Cada Host Virtual
Com a estrutura de diretórios definida, é hora de fazer alguns scripts. Estaremos usando HTML e o editor de texto nano para criar algumas páginas web básicas. Insira o seguinte comando para abrir o nano e criar um arquivo index.html no diretório do primeiro domínio:
|
1 |
vim /var/www/example.dev/public_html/index.html |
No editor, coloque o seguinte código de exemplo que será exibido quando acessarmos o domínio:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>Bem-vindo ao Example.dev!</title> </head> <body> <h1>Sucesso! O example.dev virtual host está funcionando!</h1> </body> </html> |
Depois de colar as linhas acima, pressione “!wq” para salvar e sair do arquivo.
Crie a página index.html para o segundo domínio usando o editor nano inserindo o seguinte comando:
|
1 |
vim /var/www/mydomain.com/public_html/index.html |
Em seguida, no editor, cole o seguinte código HTML, salve e saia:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>Bem-vindo ao Mydomain.com!</title> </head> <body> <h1>Sucesso! O mydomain.com virtual host está funcionando!</h1> </body> </html> |
Agora, você tem as páginas para testar os dois hosts virtuais que vamos criar no próximo passo.
Passo 4 – Criar Arquivos de Host Virtual para os Nomes de Domínio
Os arquivos de host virtual contêm configurações para cada host virtual. Eles definem como um nome de domínio será servido. Uma nova instalação do Apache vem com um arquivo de host virtual padrão chamado 000-default.conf que podemos usar e adaptar para nossos domínios. Como você pode ver, ele termina com uma extensão .conf, que é o que o Ubuntu espera para arquivos de configuração.
Os arquivos de configuração do Apache estão localizados no diretório /etc/apache2/sites-available. Lá nós armazenaremos nossos arquivos de host virtual. Podemos copiar o arquivo conf padrão e editá-lo onde for necessário.
-
Crie o primeiro arquivo de host virtual para o domínio example.dev
Insira o seguinte comando para criar o example.dev.conf a partir da cópia do arquivo conf padrão:
|
1 |
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.dev.conf |
Next, open the created file using nano editor with sudo privileges using the following command:
|
1 |
sudo nano /etc/apache2/sites-available/example.dev.conf |
The default conf file looks like the screenshot below. The comments are for guiding you. We can remove them and leave only the clean file with the actual configuration lines:

You need to customize this file for your domain name and directory path where you have saved the website files. In addition, we will update and add several directives to the file. It already has a ServerAdmin directive, which contains the email address on which the server administrator will receive emails. It also has a DocumentRoot directive, which points to the directory where you have stored the website files.
We need to add two new directives: ServerName and ServerAlias. ServerName sets the base domain name. It is where you put your domain. ServerAlias defines other names that Apache should match as if they are the base domain name. It allows you to match hosts like the www.
Update the file to look as shown below:
|
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> ServerAdmin admin@example.dev ServerName example.dev ServerAlias www.example.dev DocumentRoot /var/www/example.dev/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
After that, update your domains and email appropriately. Once done, press CTRL + O and ENTER to save the file. To exit the editor, press CTRL + X.
-
Create the first virtual host file for mydomain.com domain
We can just copy the virtual host for the first domain and update it where necessary for the second domain. Use the following command to copy the file:
|
1 |
sudo cp /etc/apache2/sites-available/example.dev.conf /etc/apache2/sites-available/mydomain.com.conf |
Then, open it in nano editor using the command:
|
1 |
sudo nano /etc/apache2/sites-available/mydomain.com.conf |
Find the directives and update them appropriately so the file looks like shown below:
|
1 2 3 4 5 6 7 8 |
<VirtualHost *:80> ServerAdmin admin@mydomain.com ServerName mydomain.com ServerAlias www.mydomain.com DocumentRoot /var/www/mydomain.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> |
Once done, save the file and exit the editor.
Step 5 – Enabling the Virtual Host Files
In step four, we created the virtual host files. However, they are not functional until you enable them. Apache has a tool called a2ensite that we will use to enable the virtual hosts.
Enter the following two commands to enable the virtual hosts:
|
1 2 |
sudo a2ensite example.dev.conf sudo a2ensite mydomain.com.conf |
The output of the above commands is as shown below:

Next, you should disable the default configuration file, we use the a2dissite Apache tool for disabling sites. Enter the following command:
|
1 |
sudo a2dissite 000-default.conf |
As seen from the output, you must restart Apache for the configurations to pick up. Use the following command:
|
1 |
sudo systemctl restart apache2 |
Em seguida, verifique o status do Apache usando o seguinte comando:
|
1 |
sudo systemctl status apache2 |
A saída mostra que o seu servidor está ativo e em execução, e é capaz de servir os dois sites.

Passo 6 – Modificar Hosts Locais com Domínios de Exemplo
Se você não registrou um domínio real, mas estava usando domínios de teste, terá que atualizar seus arquivos de hosts locais. Eles precisam interceptar o tráfego e direcioná-lo para o diretório do seu site quando você navegar para qualquer um dos domínios definidos nos arquivos de host virtual. Lembre-se de que isso só funcionará no seu computador local. Se o seu computador local executa um Sistema Operacional Windows, então siga as instruções para configurar hosts neste link.
Se você estiver em uma máquina Mac ou Linux, o arquivo hosts está localizado no diretório /etc. Usaremos o editor nano para abrir e adicionar nossos domínios de teste. Primeiro, encontre o endereço IP do seu VPS digitando o seguinte comando:
|
1 |
curl -4 icanhazip.com |
Insira o seguinte comando para abrir o arquivo e atualizar com o endereço IP do seu servidor:
|
1 |
sudo nano /etc/hosts |
|
1 2 3 4 |
127.0.0.1 localhost 127.0.1.1 ComputerName your_server_IP example.dev your_server_IP mydomain.com |
Em seguida, salve e feche o arquivo. Sempre que você insere um nome de domínio no seu navegador, o arquivo host é verificado primeiro. Se o nome de domínio for encontrado, o tráfego é direcionado para o endereço IP especificado. Se não for encontrado, o sistema DNS é usado para o redirecionamento global. Para os nossos domínios de teste, o tráfego será direcionado para o endereço IP especificado.
Passo 7 – Testar Seus Hosts Virtuais
Com os nomes de domínio configurados, você pode testar se eles estão funcionando verificando-os no navegador/terminal:
|
1 |
curl http://example.dev |
A saída deve exibir algo como isto:

|
1 |
http://mydomain.com |

Parabéns! Você configurou com sucesso dois sites para rodar em um único servidor.
Conclusão
Neste guia, você aprendeu como configurar seu Servidor Apache para servir mais de um site. Se você quiser adicionar mais sites, pode fazer isso seguindo as etapas e configurando hosts virtuais. O Apache pode lidar com quantos domínios você desejar, desde que os recursos do seu servidor possam suportá-los.
Boa computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.