{
  "schemaVersion": "1.0",
  "id": 145,
  "path": "/artigos/nginx-varios-sites-mesma-vps",
  "url": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps",
  "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps.md",
  "jsonUrl": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps.json",
  "title": "Como hospedar vários sites na mesma VPS com Nginx",
  "seoTitle": "Vários sites na mesma VPS com Nginx | RoxyCloud",
  "description": "Configure vários domínios em uma VPS com Nginx: server blocks, bloco padrão, um pool do PHP-FPM por site, SSL por domínio com Certbot e os erros mais comuns.",
  "category": "servidor-vps-cloud",
  "categoryLabel": "Servidor VPS (Cloud)",
  "categoryUrl": "https://ajuda.roxycloud.com.br/categorias/servidor-vps-cloud",
  "datePublished": "2026-09-29",
  "dateModified": "2026-09-29",
  "readingMinutes": 8,
  "wordCount": 1588,
  "h1": "Como hospedar vários sites na mesma VPS com Nginx",
  "excerpt": "Configure vários domínios em uma VPS com Nginx: server blocks, bloco padrão, um pool do PHP-FPM por site, SSL por domínio com Certbot e os erros mais comuns.",
  "author": "Equipe RoxyCloud",
  "language": "pt-BR",
  "toc": [
    {
      "id": "quando-faz-sentido-juntar-sites-em-uma-vps",
      "label": "Quando faz sentido juntar sites em uma VPS",
      "level": 2
    },
    {
      "id": "como-o-nginx-escolhe-qual-site-abrir",
      "label": "Como o Nginx escolhe qual site abrir",
      "level": 2
    },
    {
      "id": "estrutura-sites-available-e-sites-enabled",
      "label": "Estrutura: sites-available e sites-enabled",
      "level": 2
    },
    {
      "id": "server-blocks-para-site-php-e-site-estatico",
      "label": "Server blocks para site PHP e site estático",
      "level": 2
    },
    {
      "id": "isolamento-um-usuario-e-um-pool-do-php-por-site",
      "label": "Isolamento: um usuário e um pool do PHP por site",
      "level": 2
    },
    {
      "id": "usuario-e-permissoes",
      "label": "Usuário e permissões",
      "level": 3
    },
    {
      "id": "um-pool-do-php-fpm-por-site",
      "label": "Um pool do PHP-FPM por site",
      "level": 3
    },
    {
      "id": "dns-ssl-e-seguranca",
      "label": "DNS, SSL e segurança",
      "level": 2
    },
    {
      "id": "erros-comuns-com-varios-sites",
      "label": "Erros comuns com vários sites",
      "level": 2
    },
    {
      "id": "limites-e-qual-vps-usar-na-roxycloud",
      "label": "Limites e qual VPS usar na RoxyCloud",
      "level": 2
    },
    {
      "id": "perguntas-frequentes",
      "label": "Perguntas frequentes",
      "level": 2
    }
  ],
  "faqs": [
    {
      "question": "Quantos sites cabem em uma VPS de 4 GB?",
      "answer": "Com pools do PHP em modo ondemand e cache de página, de 3 a 5 sites WordPress leves ou dezenas de sites estáticos. Loja WooCommerce ou site com muito tráfego pede mais RAM ou uma VPS própria."
    },
    {
      "question": "Um site invadido afeta os outros?",
      "answer": "Sem isolamento, sim. Com um usuário e um pool do PHP por site e pastas fechadas para os demais, o estrago fica contido. Para clientes que não se conhecem, containers ou VPS separadas isolam ainda mais."
    },
    {
      "question": "Preciso de um IP por site?",
      "answer": "Não. O Nginx escolhe o site pelo cabeçalho Host e, no HTTPS, pelo SNI. Um único IP atende todos os domínios, cada um com o seu certificado."
    },
    {
      "question": "Por que um domínio desconhecido abre um dos meus sites?",
      "answer": "Porque, sem um bloco default_server, o Nginx usa o primeiro bloco carregado. Crie um bloco padrão que responde 444 e rejeita o handshake TLS."
    },
    {
      "question": "Um certificado para todos os sites ou um por site?",
      "answer": "Um por site. Um certificado com todos os domínios falha na renovação se um deles deixar de apontar para a VPS. Separados, cada um renova sozinho."
    }
  ],
  "howToSteps": [],
  "relatedGuides": [
    {
      "title": "RDP não conecta na VPS Windows? Use o console VNC do painel",
      "url": "https://ajuda.roxycloud.com.br/artigos/console-vnc-vps-windows-rdp-nao-conecta",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/console-vnc-vps-windows-rdp-nao-conecta.md"
    },
    {
      "title": "Disco cheio no Linux: como ver o que ocupa espaço na VPS",
      "url": "https://ajuda.roxycloud.com.br/artigos/disco-cheio-linux-ver-espaco-vps",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/disco-cheio-linux-ver-espaco-vps.md"
    },
    {
      "title": "Como monitorar uma VPS 24 horas: alertas, uptime e métricas",
      "url": "https://ajuda.roxycloud.com.br/artigos/monitorar-vps-24-horas",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/monitorar-vps-24-horas.md"
    },
    {
      "title": "Como monitorar a VPS com htop e Netdata",
      "url": "https://ajuda.roxycloud.com.br/artigos/htop-e-netdata-monitorar-vps",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/htop-e-netdata-monitorar-vps.md"
    },
    {
      "title": "Como instalar o Portainer na VPS para gerenciar o Docker",
      "url": "https://ajuda.roxycloud.com.br/artigos/como-instalar-portainer-vps",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/como-instalar-portainer-vps.md"
    }
  ],
  "relatedProducts": [
    "https://roxycloud.com.br/vps-xeon",
    "https://roxycloud.com.br/hospedagem-de-sites"
  ],
  "content": {
    "format": "markdown",
    "body": "**Resposta rápida:** para rodar vários sites na mesma VPS, crie um **server block do Nginx por domínio** em `sites-available`, ative com um link em `sites-enabled` e adicione um bloco `default_server` que recusa domínios desconhecidos. Dê a cada site PHP um usuário Linux e um pool do PHP-FPM próprios, emita um certificado por domínio com o Certbot e aponte o DNS de todos para o mesmo IP. Uma VPS de 4 GB atende um conjunto pequeno de sites estáticos ou WordPress leves.\n\n## Quando faz sentido juntar sites em uma VPS\n\nAgências, freelancers e desenvolvedores costumam reunir projetos pequenos em uma VPS para reduzir custo. Um servidor com dez sites de pouco tráfego custa bem menos que dez hospedagens separadas, e você administra um sistema só.\n\nO preço dessa economia é que os sites dividem CPU, memória e disco. Um site com pico ou sob ataque deixa os vizinhos lentos, e uma configuração quebrada no Nginx pode derrubar todos. Quando um site vira o principal do negócio, mova-o para uma VPS própria antes de um incidente.\n\n## Como o Nginx escolhe qual site abrir\n\nTodos os domínios chegam ao mesmo IP. O Nginx separa as requisições pelo nome enviado no cabeçalho `Host` e, no HTTPS, pelo nome enviado no início da conexão TLS (SNI). Ele compara esse nome com o `server_name` de cada bloco, nesta prioridade:\n\n| Prioridade | Tipo de server_name | Exemplo |\n| --- | --- | --- |\n| 1 | Nome exato | `loja.com.br` |\n| 2 | Curinga no início (o mais longo vence) | `*.loja.com.br` |\n| 3 | Curinga no fim (o mais longo vence) | `loja.*` |\n| 4 | Expressão regular (vale a primeira na ordem) | `~^(www\\.)?loja\\.com\\.br$` |\n| 5 | Nenhum casou: servidor padrão da porta | O bloco com `default_server`, ou o primeiro carregado |\n\nA última linha causa surpresas. Sem um `default_server` explícito, qualquer domínio apontado para o seu IP, ou o próprio IP digitado no navegador, abre o primeiro site carregado. Isso expõe o site de um cliente em um endereço que não é dele e confunde o Google. A correção está na seção de SSL e segurança.\n\n## Estrutura: sites-available e sites-enabled\n\nNo Ubuntu e no Debian, cada site fica em um arquivo próprio em `/etc/nginx/sites-available/`, e o Nginx só carrega o que estiver linkado em `/etc/nginx/sites-enabled/`. Nomeie cada arquivo com o domínio:\n\n```bash\n# ativar um site\nsudo ln -s /etc/nginx/sites-available/site1.com.br /etc/nginx/sites-enabled/\n# desativar o site de exemplo que vem com o pacote\nsudo rm /etc/nginx/sites-enabled/default\n# testar antes de recarregar, sempre\nsudo nginx -t && sudo systemctl reload nginx\n```\n\nRode `nginx -t` sempre antes de recarregar. Um erro de sintaxe em um site impede o Nginx de aceitar a configuração nova de todos, e um reinício da VPS com esse erro deixa todos fora do ar. Se ainda não tem o Nginx, veja [como instalar o Nginx](https://ajuda.roxycloud.com.br/artigos/instalar-nginx-linux).\n\n## Server blocks para site PHP e site estático\n\nSite WordPress ou outra aplicação PHP, em `/etc/nginx/sites-available/site1.com.br`, já usando o pool próprio da próxima seção:\n\n```nginx\nserver {\n    listen 80;\n    server_name site1.com.br www.site1.com.br;\n    root /var/www/site1.com.br/public;\n    index index.php index.html;\n\n    access_log /var/log/nginx/site1.com.br.access.log;\n    error_log  /var/log/nginx/site1.com.br.error.log;\n\n    location / {\n        try_files $uri $uri/ /index.php?$args;\n    }\n\n    location ~ \\.php$ {\n        include snippets/fastcgi-php.conf;\n        fastcgi_pass unix:/run/php/php8.3-fpm-site1.sock;\n    }\n\n    location ~ /\\.(?!well-known) {\n        deny all;\n    }\n}\n```\n\nSite estático, em `/etc/nginx/sites-available/site2.com.br`:\n\n```nginx\nserver {\n    listen 80;\n    server_name site2.com.br www.site2.com.br;\n    root /var/www/site2.com.br/public;\n    index index.html;\n\n    access_log /var/log/nginx/site2.com.br.access.log;\n    error_log  /var/log/nginx/site2.com.br.error.log;\n\n    location / {\n        try_files $uri $uri/ =404;\n    }\n}\n```\n\nLogs separados mostram de onde vem cada erro e cada pico, e a rotação padrão do Ubuntu já cuida deles. Para uma aplicação Node, Python ou container, troque o bloco do PHP por um `proxy_pass`, como no guia de [Next.js na VPS](https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps). O exemplo usa PHP 8.3, padrão do Ubuntu 24.04; ajuste o número se a sua versão for outra.\n\n## Isolamento: um usuário e um pool do PHP por site\n\nNa instalação padrão, todo o PHP roda como o mesmo usuário em um único pool. Um plugin vulnerável em um site consegue ler e alterar os arquivos de todos. O isolamento básico é dar a cada site um usuário Linux sem login e um pool do PHP-FPM rodando com esse usuário.\n\n### Usuário e permissões\n\n```bash\nsudo useradd --system --user-group --home-dir /var/www/site1.com.br --shell /usr/sbin/nologin site1\nsudo mkdir -p /var/www/site1.com.br/public\nsudo chown -R site1:www-data /var/www/site1.com.br\nsudo find /var/www/site1.com.br -type d -exec chmod 2750 {} +\nsudo find /var/www/site1.com.br -type f -exec chmod 640 {} +\n```\n\n- **Dono site1:** o PHP do site lê e grava os próprios arquivos, como uploads e cache.\n- **Grupo www-data com leitura:** o Nginx lê CSS, imagens e JavaScript, mas não grava nada.\n- **Nenhuma permissão para outros:** o usuário do site2 não consegue nem listar a pasta do site1.\n- **O 2 do 2750:** é o bit setgid, que faz arquivos novos herdarem o grupo da pasta. Sem ele, um upload feito pelo PHP não seria servido pelo Nginx.\n\n### Um pool do PHP-FPM por site\n\nCrie `/etc/php/8.3/fpm/pool.d/site1.conf`:\n\n```ini\n[site1]\nuser = site1\ngroup = site1\nlisten = /run/php/php8.3-fpm-site1.sock\nlisten.owner = www-data\nlisten.group = www-data\nlisten.mode = 0660\npm = ondemand\npm.max_children = 5\npm.process_idle_timeout = 30s\npm.max_requests = 500\n```\n\n```bash\nsudo php-fpm8.3 -t\nsudo systemctl reload php8.3-fpm\nls -l /run/php/\n```\n\nO modo `ondemand` é o que torna vários sites viáveis com pouca RAM: sem visitas, o pool não mantém processos; eles nascem na primeira requisição e morrem depois de 30 segundos parados. O `pm.max_children` limita quanto um site pode crescer, e o `pm.max_requests` recicla processos para conter vazamentos de memória de plugins. Para clientes que não se conhecem, containers ou VPS separadas isolam ainda mais.\n\n## DNS, SSL e segurança\n\nCada domínio precisa de registros A, no domínio raiz e no `www`, apontando para o IP da VPS. Com o DNS resolvendo, emita **um certificado por site**:\n\n```bash\nsudo certbot --nginx -d site1.com.br -d www.site1.com.br\nsudo certbot --nginx -d site2.com.br -d www.site2.com.br\nsudo certbot certificates\nsudo certbot renew --dry-run\n```\n\nNão junte domínios de clientes diferentes em um certificado só: se um cliente sai e o domínio deixa de apontar para a VPS, a renovação falha para todos os sites daquele certificado.\n\nAgora o bloco padrão que barra domínios desconhecidos, em `/etc/nginx/sites-available/padrao`:\n\n```nginx\nserver {\n    listen 80 default_server;\n    listen 443 ssl default_server;\n    server_name _;\n    ssl_reject_handshake on;\n    return 444;\n}\n```\n\nO `return 444` fecha a conexão sem resposta, e o `ssl_reject_handshake` (Nginx 1.19.4 ou mais novo) recusa o HTTPS de nomes sem bloco próprio, sem precisar de certificado. Ative com um link em `sites-enabled` e teste com `curl -I http://IP_DA_VPS`, que deve falhar sem resposta.\n\n- **Firewall:** libere só 80, 443 e o SSH, de preferência em [porta alterada](https://ajuda.roxycloud.com.br/artigos/mudar-porta-ssh-linux) .\n- **Fail2ban:** opcional, contra força bruta no SSH e no login do WordPress.\n- **Backup:** copie arquivos e bancos de cada site para fora da VPS, como em [backup automático com rsync](https://ajuda.roxycloud.com.br/artigos/backup-automatico-linux-rsync) .\n\n## Erros comuns com vários sites\n\n| Sintoma | Causa provável | Solução |\n| --- | --- | --- |\n| 502 Bad Gateway em um site PHP | Socket do server block diferente do pool, ou pool parado | Compare `fastcgi_pass` com o `listen` do pool e veja o status do PHP-FPM |\n| 403 Forbidden em tudo | Nginx não atravessa a pasta ou falta o arquivo de índice | Confira dono, grupo e o modo 2750 das pastas |\n| Um domínio abre o site de outro | Nome faltando no `server_name` (como o www) ou DNS errado | Revise o `server_name` e teste com `dig` |\n| Upload funciona, mas a imagem não aparece | Arquivo criado sem o grupo www-data | Reaplique o grupo e o bit setgid |\n| Certbot falha em um domínio | Domínio ainda não aponta para a VPS | Confirme o registro A e rode o Certbot só para esse site |\n\nPara ver erros de um site em tempo real, use `sudo tail -f /var/log/nginx/site1.com.br.error.log`. Para testar um site antes de mudar o DNS, force o nome: `curl -I -H \"Host: site1.com.br\" http://IP_DA_VPS`.\n\n## Limites e qual VPS usar na RoxyCloud\n\nCom um usuário por site, fica fácil ver quanto cada um consome:\n\n```bash\nps -o user=,rss= -C php-fpm8.3 | awk '{m[$1]+=$2} END {for (u in m) printf \"%s %.0f MB\\n\", u, m[u]/1024}'\nfree -h\n```\n\nQuando a soma dos sites passar de 70% da RAM de forma constante, suba de plano ou separe as cargas.\n\n| Conjunto de sites | Plano de partida |\n| --- | --- |\n| Até 5 WordPress leves ou dezenas de estáticos | VPS Xeon 4 GB (3 vCPU, 40 GB NVMe) |\n| Agência com 10 a 15 sites e uma loja pequena | VPS Xeon 8 GB (4 vCPU, 55 GB NVMe) |\n| Sites com muito PHP fora do cache | VPS Ryzen 9 8 GB (3 vCPU, 100 GB NVMe) |\n\nNa RoxyCloud, a [VPS Xeon](https://roxycloud.com.br/vps-xeon) é a escolha padrão para vários sites, por entregar mais núcleos pelo mesmo preço. Todas as VPS têm acesso root, IPv4 dedicado, Anti-DDoS incluso e ficam no datacenter próprio em Presidente Prudente (SP). Se você não quer administrar servidor, a [hospedagem de sites com cPanel](https://roxycloud.com.br/hospedagem-de-sites) também comporta vários domínios.\n\n## Perguntas frequentes\n\n**Quantos sites cabem em uma VPS de 4 GB?**\n\nCom pools do PHP em modo ondemand e cache de página, de 3 a 5 sites WordPress leves ou dezenas de sites estáticos. Loja WooCommerce ou site com muito tráfego pede mais RAM ou uma VPS própria.\n\n**Um site invadido afeta os outros?**\n\nSem isolamento, sim. Com um usuário e um pool do PHP por site e pastas fechadas para os demais, o estrago fica contido. Para clientes que não se conhecem, containers ou VPS separadas isolam ainda mais.\n\n**Preciso de um IP por site?**\n\nNão. O Nginx escolhe o site pelo cabeçalho Host e, no HTTPS, pelo SNI. Um único IP atende todos os domínios, cada um com o seu certificado.\n\n**Por que um domínio desconhecido abre um dos meus sites?**\n\nPorque, sem um bloco `default_server`, o Nginx usa o primeiro bloco carregado. Crie um bloco padrão que responde 444 e rejeita o handshake TLS.\n\n**Um certificado para todos os sites ou um por site?**\n\nUm por site. Um certificado com todos os domínios falha na renovação se um deles deixar de apontar para a VPS. Separados, cada um renova sozinho."
  },
  "jsonLd": [
    {
      "@type": "Article",
      "@id": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps#article",
      "headline": "Vários sites na mesma VPS com Nginx",
      "description": "Configure vários domínios em uma VPS com Nginx: server blocks, bloco padrão, um pool do PHP-FPM por site, SSL por domínio com Certbot e os erros mais comuns.",
      "url": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps",
      "articleSection": "Servidor VPS (Cloud)",
      "inLanguage": "pt-BR",
      "isAccessibleForFree": true,
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps#webpage"
      },
      "image": [
        "https://ajuda.roxycloud.com.br/og-ajuda.png"
      ],
      "author": {
        "@type": "Organization",
        "name": "RoxyCloud"
      },
      "publisher": {
        "@type": "Organization",
        "name": "RoxyCloud",
        "logo": {
          "@type": "ImageObject",
          "url": "https://cdn.roxycloud.com.br/logo.png"
        }
      },
      "datePublished": "2026-09-29T14:47:27.000Z",
      "dateModified": "2026-09-29T15:00:27.000Z"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Início",
          "item": "https://ajuda.roxycloud.com.br"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Servidor VPS (Cloud)",
          "item": "https://ajuda.roxycloud.com.br/categorias/servidor-vps-cloud"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Como hospedar vários sites na mesma VPS com Nginx",
          "item": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://ajuda.roxycloud.com.br/artigos/nginx-varios-sites-mesma-vps#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Quantos sites cabem em uma VPS de 4 GB?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Com pools do PHP em modo ondemand e cache de página, de 3 a 5 sites WordPress leves ou dezenas de sites estáticos. Loja WooCommerce ou site com muito tráfego pede mais RAM ou uma VPS própria."
          }
        },
        {
          "@type": "Question",
          "name": "Um site invadido afeta os outros?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sem isolamento, sim. Com um usuário e um pool do PHP por site e pastas fechadas para os demais, o estrago fica contido. Para clientes que não se conhecem, containers ou VPS separadas isolam ainda mais."
          }
        },
        {
          "@type": "Question",
          "name": "Preciso de um IP por site?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Não. O Nginx escolhe o site pelo cabeçalho Host e, no HTTPS, pelo SNI. Um único IP atende todos os domínios, cada um com o seu certificado."
          }
        },
        {
          "@type": "Question",
          "name": "Por que um domínio desconhecido abre um dos meus sites?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Porque, sem um bloco default_server, o Nginx usa o primeiro bloco carregado. Crie um bloco padrão que responde 444 e rejeita o handshake TLS."
          }
        },
        {
          "@type": "Question",
          "name": "Um certificado para todos os sites ou um por site?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Um por site. Um certificado com todos os domínios falha na renovação se um deles deixar de apontar para a VPS. Separados, cada um renova sozinho."
          }
        }
      ]
    }
  ]
}