Poupe 15% em todos os serviços de alojamento

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código: Skills Começar a trabalhar
Secções
Administração Linux

Como Configurar Virtual Hosts no Nginx no Ubuntu

Configurar hosts virtuais no Nginx é uma das técnicas mais poderosas para hospedar múltiplos sites num único servidor, cada um com seu próprio nome de domínio, diretório raiz e configuração independente. O Nginx lida com isso 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 sites de clientes ou a escalar uma aplicação multi-tenant, este guia fornece um passo a passo completo e pronto para produção para configurar hosts virtuais Nginx no Ubuntu. Vamos cobrir 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 root, armazenamento SSD e implementação instantânea — perfeito para este caso exato.

Pré-requisitos

Antes de começar, certifique-se de que as seguintes condições são atendidas:

Nginx Instalado no Seu Servidor

Se Nginx ainda não estiver instalado, execute os seguintes comandos no seu servidor Ubuntu:

sudo apt update
sudo apt install nginx

Verifique a instalação e confirme que o serviço está em execução:

sudo systemctl status nginx

Você deve ver active (running) na saída. Se não, inicie-o manualmente:

sudo systemctl start nginx
sudo systemctl enable nginx

Nomes de Domínio Apontando 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. Você precisará criar registros A nas suas configurações DNS apontando para o IP do servidor.

> Precisa de um domínio? Registre o seu através do Registro de Domínios AlexHost e gerencie registros DNS diretamente do seu painel de controle.

Para fins de teste local, você pode contornar o DNS completamente editando o seu arquivo /etc/hosts (abordado na Etapa 7).

Permissões Necessárias

Você precisará de privilégios sudo no seu servidor Ubuntu para criar diretórios, editar arquivos de configuração e gerenciar o serviço Nginx.

Passo 1: Configurar Diretórios para Cada Website

Cada website hospedado no seu servidor deve ter seu próprio diretório isolado para armazenar arquivos web. Esta separação mantém seus projetos organizados e evita conflitos de configuração.

Neste guia, vamos configurar dois domínios de exemplo: example1.com e example2.com. Substitua estes pelos nomes de domínio reais ao longo do guia.

Criar os Diretórios Raiz Web

sudo mkdir -p /var/www/example1.com/html
sudo mkdir -p /var/www/example2.com/html

A flag -p cria todos os diretórios intermediários conforme necessário.

Atribuir Propriedade Correta

Conceda propriedade destes diretórios a www-data, o utilizador do sistema que 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/html

Isto garante que 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/www

A permissão 755 significa que o proprietário tem acesso completo 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 se cada host virtual está funcionando corretamente, crie um arquivo index.html simples para cada site.

Para example1.com

echo "<h1>Welcome to Example1.com!</h1>" | sudo tee /var/www/example1.com/html/index.html

Para example2.com

echo "<h1>Welcome to Example2.com!</h1>" | sudo tee /var/www/example2.com/html/index.html

Essas páginas de espaço reservado confirmarão que o Nginx está roteando solicitações para a raiz de documento correta para cada domínio.

Passo 3: Criar Ficheiros de Configuração de Virtual Host

Nginx armazena ficheiros de configuração de site em /etc/nginx/sites-available/. Cada ficheiro define um server block — o equivalente Nginx de um virtual host Apache. Os sites ativados são então symlinked para /etc/nginx/sites-enabled/.

Configuração para example1.com

Crie um novo ficheiro de configuração:

sudo nano /etc/nginx/sites-available/example1.com

Adicione o seguinte server block:

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.com

Adicione o seguinte server block:

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

DiretivaFinalidade
listen 80Escuta conexões HTTP recebidas na porta 80
listen [::]:80Ativa suporte IPv6 na porta 80
server_nameDefine quais nomes de domínio este bloco trata
rootDefine a raiz do documento — onde os ficheiros do site são armazenados
indexEspecifica o ficheiro padrão a servir quando um diretório é solicitado
try_filesTenta servir o ficheiro solicitado; retorna 404 se não encontrado
access_log / error_logFicheiros de registo separados por site para depuração mais fácil

Passo 4: Ativar os Virtual Hosts

Nginx ativa sites criando links simbólicos de sites-available para sites-enabled. Este design permite que você prepare configurações sem ativá-las 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 quiser evitar que a página de espaço reservado padrão do Nginx interfira, desative-a:

sudo rm /etc/nginx/sites-enabled/default

Você sempre pode reativá-la mais tarde recriando o symlink.

Passo 5: Testar a Configuração do Nginx

Antes de reiniciar o Nginx, sempre valide seus arquivos de configuração quanto a erros de sintaxe. Um arquivo mal configurado pode derrubar todos os sites no servidor.

sudo nginx -t

Um teste bem-sucedido retorna:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Se você vir erros, o Nginx indicará o arquivo e o número da linha onde o problema ocorreu. Revise o arquivo de configuração relevante e corrija quaisquer erros de digitação ou ponto-e-vírgula ausentes antes de prosseguir.

Passo 6: Reiniciar Nginx para Aplicar Alterações

Depois que o teste de configuração passar, recarregue ou reinicie Nginx para aplicar suas alterações:

sudo systemctl restart nginx

Alternativamente, use reload para um reinício elegante que não interrompe as conexões ativas:

sudo systemctl reload nginx

Passo 7: Aceder aos Seus Websites

Se o DNS Já Estiver 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 DNS A, simplesmente abra um navegador e navegue para:

  • http://example1.com
  • http://example2.com

Deverá ver as respectivas mensagens de "Boas-vindas" que criou no Passo 2.

Para Testes Locais (Sem DNS)

Se está a testar localmente ou o DNS ainda não se propagou, pode simular a resolução de domínios 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/hosts

Adicione 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.com

Guarde o ficheiro e teste no seu navegador. Lembre-se de remover estas entradas assim que os seus registos DNS reais estiverem activos.

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 renováveis automaticamente.

> Prefere uma solução SSL premium? 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-nginx

Obter e Instalar Certificados SSL

Execute 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.com
sudo certbot --nginx -d example2.com -d www.example2.com

Siga as instruções interativas. Certbot irá:

  1. Verificar a propriedade do domínio via desafio HTTP
  2. Obter um certificado assinado de Let’s Encrypt
  3. Atualizar automaticamente o seu bloco de servidor Nginx para escutar na porta 443
  4. Configurar redirecionamento de HTTP para HTTPS

Verificar Renovação Automática

Os certificados Let’s Encrypt expiram a cada 90 dias. Certbot instala um temporizador systemd para lidar com renovações automaticamente. Teste com:

sudo certbot renew --dry-run

Se a execução de teste for concluída sem erros, os seus certificados serão renovados automaticamente sem qualquer intervenção manual.

Como Ficará o Seu Bloco de Servidor Atualizado

Após Certbot ser executado, a sua configuração será atualizada automaticamente para algo semelhante a 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 uma configuração cuidadosa, podem surgir problemas. Aqui estão os problemas mais comuns e como resolvê-los:

502 Bad Gateway

Isto normalmente significa que 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.com

404 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-enabled sã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 a saída de erro — ela apontará para o ficheiro e linha exatos que causam o problema.

Verificação de 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.log

Considerações Avançadas

Hospedagem de Aplicações PHP

Se seus sites executam PHP (por exemplo, WordPress, Laravel), você precisará 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;
}

Usando um Painel de Controle

Gerenciar hosts virtuais Nginx manualmente via linha de comando é poderoso, mas demorado em escala. Se você preferir uma interface gráfica, considere o VPS com cPanel da AlexHost ou explore a gama completa de Painéis de Controle VPS para encontrar o ajuste certo para seu fluxo de trabalho.

Escalando Além de um Único VPS

À medida que seu tráfego cresce, um único VPS pode não ser suficiente. Para cargas de trabalho de alto tráfego e uso intensivo de recursos, considere fazer upgrade para Servidores Dedicados para recursos garantidos, isolamento completo de hardware e desempenho máximo.

Conclusão

Você configurou com sucesso hosts virtuais Nginx no Ubuntu, permitindo que seu servidor hospede múltiplos sites independentes simultaneamente. Aqui está um resumo do que foi realizado:

  • Criou diretórios de raiz web isolados para cada domínio com propriedade e permissões corretas
  • Escreveu configurações de bloco de servidor limpas e prontas para produção com logs de acesso e erro separados
  • Ativou hosts virtuais usando o padrão sites-available / sites-enabled baseado em symlink do Nginx
  • Validou e recarregou a configuração do Nginx com segurança
  • Protegeu cada site com HTTPS usando certificados Let's Encrypt gratuitos via Certbot

Esta configuração é eficiente, escalável e segue as melhores práticas do Nginx. Quer você esteja hospedando dois sites ou vinte, o mesmo padrão se aplica — simplesmente repita o processo para cada domínio adicional.

Para melhores resultados, combine esta configuração com um ambiente de hospedagem rápido e confiável. Os planos de VPS Hosting da AlexHost são otimizados para cargas de trabalho Linux, vêm com acesso root completo e são apoiados por suporte técnico 24/7 — oferecendo a base ideal para executar Nginx em produção.