Como Configurar Virtual Hosts no Nginx no Ubuntu
Configurar hosts virtuais no Nginx é uma das técnicas mais poderosas para hospedar múltiplos websites num único servidor, cada um com o seu próprio nome de domínio, diretório raiz e configuração independente. O Nginx gere isto através de blocos de servidor — unidades de configuração flexíveis e leves que definem como o servidor web responde a pedidos para cada domínio.
Quer esteja a gerir um portfólio pessoal, a executar websites de clientes ou a dimensionar uma aplicação multi-inquilino, este guia fornece uma explicação completa e pronta para produção para configurar hosts virtuais Nginx no Ubuntu. Abordaremos estrutura de diretórios, configuração de blocos de servidor, ativação de sites, configuração SSL/HTTPS e resolução de problemas — tudo o que precisa para passar de zero para um servidor Nginx multi-site totalmente funcional.
> À procura de um servidor Ubuntu fiável para acompanhar? Os planos de VPS Hosting da AlexHost dão-lhe acesso total como root, armazenamento SSD e implementação instantânea — perfeito para este caso de uso exato.
Índice
- Pré-requisitos
- Configurar Diretórios para Cada Website
- Criar Conteúdo HTML de Exemplo
- Criar Ficheiros de Configuração de Hosts Virtuais
- Ativar os Hosts Virtuais
- Testar a Configuração do Nginx
- Reiniciar o Nginx para Aplicar Alterações
- Aceder aos Seus Websites
- Ativar HTTPS com Let’s Encrypt (Recomendado)
- Resolução de Problemas Comuns
- Conclusão
Pré-requisitos
Antes de começar, certifique-se de que as seguintes condições são cumpridas:
Nginx Instalado no Seu Servidor
Se o Nginx ainda não está instalado, execute os seguintes comandos no seu servidor Ubuntu:
sudo apt update
sudo apt install nginxVerifique a instalação e confirme que o serviço está em execução:
sudo systemctl status nginxDeverá ver active (running) no resultado. Se não, inicie-o manualmente:
sudo systemctl start nginx
sudo systemctl enable nginxNomes de Domínio Apontados para o Seu Servidor
Cada host virtual requer um nome de domínio que se resolva para o endereço IP público do seu servidor. Terá de criar registos A nas suas definições de DNS apontando para o IP do servidor.
> Precisa de um domínio? Registe o seu através do Registo de Domínios da AlexHost e gerencie registos DNS diretamente a partir do seu painel de controlo.
Para fins de teste local, pode contornar o DNS completamente editando o seu ficheiro /etc/hosts (abordado no Passo 7).
Permissões Necessárias
Terá de ter privilégios sudo no seu servidor Ubuntu para criar diretórios, editar ficheiros de configuração e gerir o serviço Nginx.
Passo 1: Configurar Diretórios para Cada Website
Cada website alojado no seu servidor deve ter o seu próprio diretório isolado para armazenar ficheiros web. Esta separação mantém os seus projetos organizados e previne conflitos de configuração.
Neste guia, configuraremos dois domínios de exemplo: example1.com e example2.com. Substitua-os pelos seus nomes de domínio reais em todo o guia.
Criar os Diretórios Raiz Web
sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/htmlA flag -p cria todos os diretórios intermédios conforme necessário.
Atribuir Propriedade Correta
Conceda propriedade destes diretórios a www-data, o utilizador do sistema que o Nginx executa:
sudo chown -R www-data:www-data /var/www/example1.com/html
sudo chown -R www-data:www-data /var/www/example2.com/htmlIsto garante que o Nginx tem as permissões de leitura necessárias para servir ficheiros a partir destes diretórios.
Definir Permissões de Diretório
sudo chmod -R 755 /var/wwwA permissão 755 significa que o proprietário tem acesso total de leitura/escrita/execução, enquanto grupos e outros utilizadores têm acesso de leitura e execução — apropriado para conteúdo web servido publicamente.
Passo 2: Criar Conteúdo HTML de Exemplo
Para verificar que cada host virtual está a funcionar corretamente, crie um ficheiro index.html simples para cada site.
Para example1.com
echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.htmlPara example2.com
echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.htmlEstas páginas de marcador de posição confirmarão que o Nginx está a encaminhar pedidos para a raiz de documento correta para cada domínio.
Passo 3: Criar Ficheiros de Configuração de Hosts Virtuais
O Nginx armazena ficheiros de configuração de site em /etc/nginx/sites-available/. Cada ficheiro define um bloco de servidor — o equivalente Nginx de um host virtual Apache. Os sites ativados são então ligados simbolicamente para /etc/nginx/sites-enabled/.
Configuração para example1.com
Crie um novo ficheiro de configuração:
sudo nano /etc/nginx/sites-available/example1.comAdicione o seguinte bloco de servidor:
server {
listen 80;
listen [::]:80;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html index.htm;
access_log /var/log/nginx/example1.com.access.log;
error_log /var/log/nginx/example1.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Guarde e feche o ficheiro (Ctrl+X, depois Y, depois Enter).
Configuração para example2.com
Crie um segundo ficheiro de configuração:
sudo nano /etc/nginx/sites-available/example2.comAdicione o seguinte bloco de servidor:
server {
listen 80;
listen [::]:80;
server_name example2.com www.example2.com;
root /var/www/example2.com/html;
index index.html index.htm;
access_log /var/log/nginx/example2.com.access.log;
error_log /var/log/nginx/example2.com.error.log;
location / {
try_files $uri $uri/ =404;
}
}Diretivas Principais Explicadas
| Diretiva | Propósito |
|---|---|
listen 80 | Escuta ligações HTTP recebidas na porta 80 |
listen [::]:80 | Ativa suporte IPv6 na porta 80 |
server_name | Define quais nomes de domínio este bloco trata |
root | Define a raiz de documento — onde os ficheiros do website são armazenados |
index | Especifica o ficheiro padrão a servir quando um diretório é solicitado |
try_files | Tenta servir o ficheiro solicitado; devolve 404 se não for encontrado |
access_log / error_log | Ficheiros de registo separados por site para depuração mais fácil |
Passo 4: Ativar os Hosts Virtuais
O Nginx ativa sites criando ligações simbólicas de sites-available para sites-enabled. Este design permite-lhe preparar configurações sem as ativar imediatamente.
sudo ln -s /etc/nginx/sites-available/example1.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/example2.com /etc/nginx/sites-enabled/Remover o Site Padrão (Opcional mas Recomendado)
Se deseja impedir que a página de marcador de posição padrão do Nginx interfira, desative-a:
sudo rm /etc/nginx/sites-enabled/defaultPode sempre reativá-la mais tarde recriando a ligação simbólica.
Passo 5: Testar a Configuração do Nginx
Antes de reiniciar o Nginx, valide sempre os seus ficheiros de configuração para erros de sintaxe. Um ficheiro mal configurado pode derrubar todos os sites no servidor.
sudo nginx -tUm teste bem-sucedido devolve:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulSe vir erros, o Nginx indicará o ficheiro e o número de linha onde o problema ocorreu. Revise o ficheiro de configuração relevante e corrija quaisquer erros de digitação ou pontos-e-vírgulas em falta antes de prosseguir.
Passo 6: Reiniciar o Nginx para Aplicar Alterações
Assim que o teste de configuração passar, recarregue ou reinicie o Nginx para aplicar as suas alterações:
sudo systemctl restart nginxAlternativamente, use reload para um reinício elegante que não interrompe ligações ativas:
sudo systemctl reload nginxPasso 7: Aceder aos Seus Websites
Se o DNS Já Está Configurado
Se os seus nomes de domínio já estão a apontar para o endereço IP do seu servidor através de registos A de DNS, simplesmente abra um navegador e navegue para:
http://example1.comhttp://example2.com
Deverá ver as respetivas mensagens de “Bem-vindo” que criou no Passo 2.
Para Teste Local (Sem DNS)
Se está a testar localmente ou o DNS ainda não se propagou, pode simular a resolução de domínio editando o ficheiro /etc/hosts da sua máquina local (em Linux/macOS) ou C:WindowsSystem32driversetchosts (em Windows).
Abra o ficheiro com privilégios elevados:
sudo nano /etc/hostsAdicione as seguintes linhas, substituindo YOUR_SERVER_IP pelo IP real do seu servidor:
YOUR_SERVER_IP example1.com www.example1.com
YOUR_SERVER_IP example2.com www.example2.comGuarde o ficheiro e teste no seu navegador. Lembre-se de remover estas entradas assim que os seus registos DNS reais estiverem ativos.
Passo 8: Ativar HTTPS com Let’s Encrypt (Recomendado)
Executar websites em HTTP simples já não é aceitável para ambientes de produção. HTTPS encripta o tráfego entre o seu servidor e visitantes, melhora as classificações de SEO e é necessário para funcionalidades modernas do navegador. Let’s Encrypt fornece certificados SSL/TLS gratuitos e automaticamente renováveis.
> Prefere uma solução SSL premium? A AlexHost oferece Certificados SSL confiáveis para empresas que precisam de validação estendida ou cobertura wildcard.
Instalar Certbot
sudo apt install certbot python3-certbot-nginxObter e Instalar Certificados SSL
Execute o Certbot para cada domínio. O plugin --nginx modifica automaticamente a sua configuração Nginx para ativar HTTPS:
sudo certbot --nginx -d example1.com -d www.example1.comsudo certbot --nginx -d example2.com -d www.example2.comSiga as instruções interativas. O Certbot irá:
- Verificar propriedade de domínio via desafio HTTP
- Obter um certificado assinado de Let’s Encrypt
- Atualizar automaticamente o seu bloco de servidor Nginx para escutar na porta 443
- Configurar redirecionamento de HTTP para HTTPS
Verificar Renovação Automática
Os certificados Let’s Encrypt expiram a cada 90 dias. O Certbot instala um temporizador systemd para lidar com renovações automaticamente. Teste-o com:
sudo certbot renew --dry-runSe a execução de teste terminar sem erros, os seus certificados serão renovados automaticamente sem qualquer intervenção manual.
Como Ficará o Seu Bloco de Servidor Atualizado
Depois de o Certbot ser executado, a sua configuração será automaticamente atualizada para algo como isto:
server {
listen 443 ssl;
server_name example1.com www.example1.com;
root /var/www/example1.com/html;
index index.html;
ssl_certificate /etc/letsencrypt/live/example1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example1.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name example1.com www.example1.com;
return 301 https://$host$request_uri;
}Resolução de Problemas Comuns
Mesmo com configuração cuidadosa, podem surgir problemas. Aqui estão os problemas mais comuns e como resolvê-los:
502 Bad Gateway
Isto normalmente significa que o Nginx não consegue comunicar com um serviço backend (por exemplo, PHP-FPM ou uma aplicação Node.js). Verifique se o serviço upstream está em execução e se o socket/porta na sua configuração está correto.
403 Forbidden
Normalmente um problema de permissões. Verifique se www-data é proprietário da raiz web e se as permissões de ficheiro estão definidas corretamente:
sudo chown -R www-data:www-data /var/www/example1.com
sudo chmod -R 755 /var/www/example1.com404 Not Found
Verifique se a diretiva root no seu bloco de servidor aponta para o diretório correto e se index.html existe nesse caminho.
Site Errado a Carregar
Se visitar example1.com carrega o conteúdo de example2.com, verifique se:
- Cada diretiva
server_nameé única e correta - As ligações simbólicas em
sites-enabledsão válidas:ls -la /etc/nginx/sites-enabled/ - O site padrão está desativado se entrar em conflito
Nginx Falha ao Iniciar Após Alteração de Configuração
Sempre execute sudo nginx -t antes de reiniciar. Revise cuidadosamente o resultado do erro — apontará para o ficheiro e linha exatos que causam o problema.
Verificar Registos
Os registos por site (configurados no Passo 3) são o seu melhor recurso de depuração:
sudo tail -f /var/log/nginx/example1.com.error.log
sudo tail -f /var/log/nginx/example1.com.access.logConsiderações Avançadas
Hospedar Aplicações PHP
Se os seus sites executam PHP (por exemplo, WordPress, Laravel), terá de instalar PHP-FPM e adicionar uma diretiva fastcgi_pass ao seu bloco de servidor:
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}Usar um Painel de Controlo
Gerir hosts virtuais Nginx manualmente através da linha de comando é poderoso mas demorado em escala. Se prefere uma interface gráfica, consid
