15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
31.10.2024

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

  1. Pré-requisitos
  2. Configurar Diretórios para Cada Website
  3. Criar Conteúdo HTML de Exemplo
  4. Criar Ficheiros de Configuração de Hosts Virtuais
  5. Ativar os Hosts Virtuais
  6. Testar a Configuração do Nginx
  7. Reiniciar o Nginx para Aplicar Alterações
  8. Aceder aos Seus Websites
  9. Ativar HTTPS com Let’s Encrypt (Recomendado)
  10. Resolução de Problemas Comuns
  11. 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 nginx

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

sudo systemctl status nginx

Deverá ver active (running) no resultado. Se não, inicie-o manualmente:

sudo systemctl start nginx
sudo systemctl enable nginx

Nomes 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/html

A 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/html

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

A 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.html

Para example2.com

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

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

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

Adicione 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

DiretivaPropósito
listen 80Escuta ligaçõ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 de documento — onde os ficheiros do website são armazenados
indexEspecifica o ficheiro padrão a servir quando um diretório é solicitado
try_filesTenta servir o ficheiro solicitado; devolve 404 se não for encontrado
access_log / error_logFicheiros 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/default

Pode 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 -t

Um teste bem-sucedido devolve:

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

Se 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 nginx

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

sudo systemctl reload nginx

Passo 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.com
  • http://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/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 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-nginx

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

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

  1. Verificar propriedade de 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. O Certbot instala um temporizador systemd para lidar com renovações automaticamente. Teste-o com:

sudo certbot renew --dry-run

Se 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.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 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.log

Consideraçõ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

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar