Nginx server blocks: como hospedar vários sites na mesma VPS

Tempo de leitura: 3 minutos

Uma VPS bem dimensionada aguenta mais de um site. O Nginx server blocks (o equivalente aos virtual hosts do Apache) permite que cada domínio tenha a sua pasta, os seus logs e a sua configuração, tudo no mesmo servidor e no mesmo IP.

Quanto mais sites você hospeda, mais vale ter CPU e disco rápidos de verdade. Se você ainda não tem onde rodar isso, a Cloud VPS Brasil já entrega o servidor pronto.

Como o Nginx escolhe qual site mostrar

Quando uma requisição chega, o Nginx olha o cabeçalho Host (o domínio digitado) e procura o server que tem esse nome em server_name. Se nenhum bater, ele usa o bloco marcado como padrão. Por isso cada site precisa do seu próprio bloco.

Passo 1: criar a pasta de cada site

sudo mkdir -p /var/www/site1.com.br/public_html
sudo mkdir -p /var/www/site2.com.br/public_html
sudo chown -R www-data:www-data /var/www/site1.com.br /var/www/site2.com.br

Crie uma página de teste em cada pasta para saber depois qual site está respondendo:

echo "Site 1 no ar" | sudo tee /var/www/site1.com.br/public_html/index.html
echo "Site 2 no ar" | sudo tee /var/www/site2.com.br/public_html/index.html

Passo 2: criar o arquivo de cada server block

No Ubuntu e no Debian, os arquivos ficam em /etc/nginx/sites-available/. Crie o primeiro:

sudo nano /etc/nginx/sites-available/site1.com.br

Com este conteúdo:

server {
    listen 80;
    listen [::]:80;
    server_name site1.com.br www.site1.com.br;

    root /var/www/site1.com.br/public_html;
    index index.html index.php;

    access_log /var/log/nginx/site1.access.log;
    error_log  /var/log/nginx/site1.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Repita para o segundo site, trocando o domínio e a pasta.

Passo 3: ativar, testar e recarregar

Ative cada site criando um link em sites-enabled:

sudo ln -s /etc/nginx/sites-available/site1.com.br /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.com.br /etc/nginx/sites-enabled/

Antes de recarregar, sempre teste a sintaxe. Um erro no arquivo pode derrubar todos os sites:

sudo nginx -t
sudo systemctl reload nginx

Se o teste responder syntax is ok e test is successful, pode recarregar.

Passo 4: apontar o DNS e testar

No painel do seu domínio, crie um registro A apontando para o IP da VPS (e outro para o www). Enquanto o DNS não propaga (veja em Propagação de DNS), você pode testar no seu computador adicionando uma linha ao arquivo hosts, que faz o domínio apontar direto para o IP da VPS:

IP_DA_VPS site2.com.br www.site2.com.br

No Windows, o arquivo fica na pasta drivers\etc dentro de System32 e precisa ser editado como administrador. No Linux e no macOS, edite o hosts do sistema com sudo. Depois do teste, apague a linha.

Passo 5: ativar HTTPS em cada site

Com o Certbot, um comando cuida de cada domínio:

sudo certbot --nginx -d site1.com.br -d www.site1.com.br

O passo a passo completo está em Let’s Encrypt na VPS Linux.

Boas práticas

  • Um arquivo por site, com o nome do domínio, facilita a manutenção.
  • Use um bloco default_server que responde com erro para domínios desconhecidos, evitando que um site mostre conteúdo de outro por engano.
  • Rode nginx -t antes de cada recarga.
  • Acompanhe o uso de CPU e RAM conforme os sites crescem, e aumente o plano antes de travar.

Espaço para crescer sem trocar de servidor

Hospedar vários sites exige folga de recursos. Na Cloud VPS Brasil você conta com Intel Xeon Gold, SSD NVMe, baixa latência, tráfego ilimitado, preço fixo em reais e suporte humano via WhatsApp e ticket. Fale com a equipe pelo WhatsApp e escolha o plano ideal para o seu projeto.