Saltar para o conteúdo principal
50% de desconto todos os planos, tempo limitado. A partir de $2.48/mo
14 min left
Aplicações web e de negócio

Nginx Proxy Manager em um VPS: Uma Análise e Guia de Configuração

C Por Chike 14 min de leitura
Nginx Proxy Manager on a VPS routing one public IP to Dashboard, Media Server, Database, and Blog containers over HTTPS

Você tem um VPS com cinco ou seis serviços Docker nele: Nextcloud, Uptime Kuma, um blog Ghost, talvez um Vaultwarden. Um único IP público. E você quer cada um em seu próprio subdomínio com HTTPS, sem editar manualmente arquivos de configuração do Nginx toda vez que adiciona um contêiner. Esse é exatamente o problema que o Nginx Proxy Manager existe para resolver.

Esta é uma análise e uma configuração completa do Nginx Proxy Manager em VPS em um único guia. O Nginx Proxy Manager (NPM) é um app Docker que envolve o Nginx em uma interface web: você aponta subdomínios para contêineres de backend e solicita certificados Let's Encrypt por um painel em vez de escrever diretivas à mão. O guia é para quem faz auto-hospedagem e para sysadmins que já rodam Docker e agora precisam de um proxy reverso que não exija mexer em nginx.conf.

Ao final, você saberá se o NPM se encaixa no seu caso, o terá em execução com HTTPS no seu VPS e conhecerá os critérios para migrar para o Caddy ou o Traefik quando o NPM deixar de ser a ferramenta certa.

A versão curta

  • O que o NPM é: um app Docker que coloca uma interface web sobre o Nginx para gerenciar proxy hosts e HTTPS automático via Let's Encrypt. Atende a quem quer uma GUI e roda uma stack de serviços pequena e razoavelmente estática.
  • Os compromissos: a configuração fica em um banco de dados SQLite, então não é versionável nem comparável por diff como um arquivo de configuração. Em 12 de julho de 2026, a última versão marcada é afetada pela CVE-2026-40519, então novas implantações devem esperar por uma versão marcada que contenha a correção. Seu painel de administração na porta 81 é a principal coisa que você precisa proteger.
  • Dimensionamento: O NPM em si consome cerca de 50 MB de RAM em repouso. Um VPS de 1 GB é a base prática; 2 GB é confortável quando você adiciona os serviços atrás dele.
  • Quando migrar: fique no NPM para uma stack pequena e majoritariamente estática onde uma GUI importa. Use o Caddy quando quiser configuração como código e uma pegada menor. Use o Traefik quando mudanças frequentes de contêineres tornam a autodescoberta do Docker mais valiosa do que o registro manual de hosts.

O Que Este Guia Não Cobre

Este é um guia de implantação em VPS, não um manual de referência. Para mantê-lo focado, os itens a seguir estão fora do escopo:

  • Personalização profunda de diretivas do Nginx (blocos location personalizados além do que a interface do NPM expõe).
  • Arquitetura de balanceamento de carga em escala.
  • Comparação de ingress do Kubernetes.
  • NPM no Windows.
  • O caminho do Cloudflare Tunnel para configurações sem IP estático.

O Que o Nginx Proxy Manager Faz (e Onde Ele Te Morde)

Nginx Proxy Manager taking one public IP and routing subdomains such as app, status, cloud, and vault.example.com to separate backend containers, each with SSL enabled

O Nginx Proxy Manager é uma aplicação Docker que roda o Nginx por baixo e adiciona um painel web por cima. Você cria proxy hosts (subdomínio para contêiner e porta de backend) e solicita certificados Let's Encrypt por formulários em vez de arquivos de configuração. Atende a uma stack pequena e razoavelmente estática de apps auto-hospedados em um único VPS.

Além do básico, o painel também lida com listas de acesso e encaminhamento bruto de fluxos TCP/UDP. Para uma stack de apps em um único VPS, isso é uma conveniência real: você adiciona um contêiner, abre o painel, aponta um subdomínio para ele, clica para emitir um certificado. Pronto.

O principal compromisso é que a configuração fonte-de-verdade do NPM fica em um banco de dados SQLite por padrão. O NPM gera arquivos legíveis do Nginx em /data/nginx/proxy_host/, mas esses arquivos são artefatos gerados, e não a configuração declarativa que você edita e versiona. Você pode inspecioná-los, mas eles não são um substituto limpo para um Caddyfile ou labels do Traefik, e a maneira confiável de reproduzir a implantação é restaurar os volumes de dados e de certificados do NPM. Para uma stack pequena e estática, isso pode ser aceitável. Para um fluxo de infraestrutura orientado a Git, é uma limitação real.

Em 12 de julho de 2026, a última versão marcada é a v2.15.1, publicada em 3 de junho de 2026. O projeto permanece ativo e licenciado sob MIT, mas sua situação de segurança atual exige uma ressalva importante: o NVD lista as versões 2.9.14 até 2.15.1 como afetadas pela CVE-2026-40519, uma vulnerabilidade de injeção de comando autenticada, corrigida no commit a5db5ed mas ainda não incluída em uma versão marcada mais recente. Antes de implantar, verifique a página de releases e use a primeira versão marcada que contenha essa correção. O NPM é mantido, mas a v2.15.1 não deveria ser descrita atualmente como totalmente corrigida.

Quanto à pegada, o NPM consome em repouso cerca de 50 MB de RAM, de acordo com a comparação de proxies reversos da byte-guard. Isso é leve o suficiente para que o NPM quase nunca seja o que sobrecarrega o seu VPS. Os serviços atrás dele é que são.

Minha opinião: o NPM é uma escolha razoável em 2026 se você quer uma GUI e roda uma pequena stack Docker. Se você vive no controle de versão e quer a configuração do seu proxy no Git, considere o Caddy. A configuração respaldada por SQLite é o fator decisivo, não algo errado no proxy em si.

O NPM troca portabilidade de configuração por uma GUI. Essa troca é boa para uma stack pequena e estática, e incômoda para um fluxo orientado a Git.

NPM vs Caddy vs Traefik: Qual Proxy Reverso Se Encaixa no Seu VPS

NPM, Caddy, and Traefik compared: NPM is a GUI for small static stacks at about 50 MB idle, Caddy is config-as-code for simple deployments at about 30 MB, and Traefik uses Docker auto-discovery for changing containers at about 80 MB

As três ferramentas se dividem em quatro eixos que decidem a escolha: como você as configura, como lidam com HTTPS, como escalam conforme o número de serviços e quanta RAM consomem em repouso. Aqui está a comparação.

AtributoGerenciador de Proxy NginxCaddyTraefik
Modelo de configuraçãoGUI web, armazenada em SQLiteCaddyfile (texto, versionável)Labels do Docker / YAML
HTTPS automáticoSim, solicitação por host na interfaceSim, por padrão, configuração zeroSim, exige configuração de resolver ACME
Autodescoberta do DockerNoNoSim, via labels de contêiner
RAM em repouso~50 MB~30 MB~80 MB
Melhor caso de usoUsuários de GUI, stacks pequenas/estáticasConfiguração como código, menor pegadaStacks Docker dinâmicas com mudanças frequentes de contêineres

Os números de RAM em repouso são observações aproximadas de uma comparação de 2026, não requisitos fixos. O uso real varia conforme a versão da imagem, os recursos habilitados, o tráfego e o registro de logs.

Os critérios de migração decorrem diretamente dessa tabela. Se você quer um painel e roda um punhado de serviços que não mudam com frequência, o NPM é a ferramenta certa. Se você prefere configuração como código, quer a menor pegada ou aprecia o provisionamento e renovação de HTTPS automáticos do Caddy sem nenhuma configuração de ACME, use o Caddy. Eu mesmo recorro ao Caddy em implantações de site único porque o tratamento de SSL é automático e o Caddyfile é curto. Se você adiciona, remove ou reimplanta contêineres com frequência, a autodescoberta baseada em labels do Traefik faz com que você pare de registrar manualmente cada novo host.

Há também o Nginx puro com o Certbot, que alguns administradores preferem para controle preciso ou implantações sem Docker. O Certbot pode automatizar a renovação de certificados, mas você ainda gerencia o roteamento de virtual hosts e a configuração do Nginx por conta própria. Se o seu principal motivo para considerar o NPM é evitar a configuração manual de proxy, o Nginx puro provavelmente não será a melhor opção.

Uma observação sobre a escolha: a comparação da byte-guard aponta o Caddy como a opção mais leve daquela comparação, e para uma nova configuração de host único em 2026 essa é uma escolha razoável. O Caddy vence por ser mais leve que o NPM, mas se você quer especificamente uma GUI, ele não é a sua melhor aposta.

Para um comparativo mais aprofundado dos motores subjacentes, consulte a comparação Caddy vs Nginx em um VPS.

Pré-requisitos: o que vais precisar

Antes de implantar, tenha estes itens prontos. Esta é uma lista curta, mas pule qualquer item e a etapa do certificado falhará mais adiante.

  • Um VPS com Docker e Docker Compose instalados (Ubuntu 22.04 LTS ou Debian 12 serve).
  • Um nome de domínio, com um registro DNS A (e AAAA se você usa IPv6) apontando para o IP público do seu VPS.
  • Acesso SSH ao VPS.
  • Portas 80 e 443 abertas para a internet no seu firewall.
  • Porta 81 acessível apenas por você, não aberta ao público (abordada na seção de segurança).

Configurando o Nginx Proxy Manager no Seu VPS com Docker Compose

Deploying Nginx Proxy Manager with Docker Compose: ports 80 and 443 public, the admin UI on port 81 bound to 127.0.0.1, and backend containers joined to a shared proxy Docker network

Esta seção implanta o NPM usando Docker Compose. Depois que seus registros DNS resolvem para o VPS, a configuração do contêiner em si é rápida, embora a propagação do DNS e a emissão do certificado possam demorar mais.

A configuração usa um arquivo Docker Compose e um comando único para criar uma rede Docker compartilhada. Crie um diretório, crie a rede, adicione o docker-compose.yml arquivo abaixo e suba o contêiner.

Primeiro, crie a rede Docker compartilhada:

docker network create proxy

Em seguida, crie o seguinte docker-compose.yml arquivo:

# docker-compose.yml
services:
  npm:
    image: 'jc21/nginx-proxy-manager:<PATCHED_VERSION>'
    restart: unless-stopped
    ports:
      - '80:80'                 # public HTTP
      - '443:443'               # public HTTPS
      - '127.0.0.1:81:81'       # admin UI, reachable only from the VPS itself
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - proxy
networks:
  proxy:
    external: true

Conecte todo contêiner de backend que o NPM precisa alcançar pelo nome de serviço à mesma rede proxy externa. Isso permite que o NPM resolva o contêiner pelo seu nome de serviço sem publicar a porta da aplicação de backend no VPS.

Faça backup de ambos os ./data e ./letsencrypt antes das atualizações. O diretório de dados contém o banco de dados e a configuração gerada do NPM, enquanto o diretório Let's Encrypt contém o material de certificados.

Algumas observações sobre este arquivo. A imagem usa por padrão um banco de dados SQLite armazenado no ./data volume. Esse é o backend padrão e é adequado para a maioria das implantações em um único VPS. Se você precisar de um banco de dados externo, o NPM suporta MariaDB/MySQL e PostgreSQL, o que significa adicionar um serviço de banco de dados e as variáveis de ambiente correspondentes. Para um único VPS, o SQLite ainda é o padrão mais simples, a menos que você tenha um motivo claro para mover o banco de dados para fora do volume de dados. A restart: unless-stopped política significa que o NPM sobe novamente se o VPS reiniciar, que é o que você quer para um serviço que fica à frente de todo o resto.

Suba-o e confirme que está em execução:

docker compose up -d
docker compose ps

Saída esperada: o contêiner npm com estado Up, portas 80 e 443 mapeadas publicamente e porta 81 vinculada apenas a 127.0.0.1. A primeira inicialização leva alguns minutos enquanto o NPM gera uma chave JWT, inicializa o banco de dados e cria o usuário administrador padrão. A documentação oficial de configuração descreve essa sequência de primeira execução.

Crie um túnel SSH a partir do seu computador local antes de abrir a interface de administração:

ssh -L 8181:127.0.0.1:81 user@your-vps

Em seguida, abra http://127.0.0.1:8181 no seu navegador. Em uma instalação nova, entre com [email protected] e changeme, e em seguida substitua imediatamente o e-mail e a senha padrão. Não torne o painel acessível publicamente enquanto as credenciais padrão estiverem ativas.

Depois de alterar as credenciais de administrador, adicione seu primeiro proxy host:

  1. No painel, vá até Hosts, depois Proxy Hosts, depois Add Proxy Host.
  2. Defina o Domain Name para o seu subdomínio (por exemplo cloud.example.com).
  3. Definir Forward Hostname / IP para o nome ou IP do contêiner de backend, e Forward Port para a porta em que ele escuta.
  4. Salve. O proxy host aparece na lista e o tráfego para esse subdomínio agora chega ao seu contêiner.

Se você roda uma interface de gerenciamento do Docker junto com isso, o mesmo padrão se aplica: aponte um subdomínio para a ferramenta de gerenciamento de contêineres da mesma forma, e faça o mesmo para um pilha de monitoramento com Prometheus e Grafana que você queira colocar atrás do proxy.

Configurando HTTPS Automático para um Subdomínio

Configuring automatic HTTPS in Nginx Proxy Manager: a DNS A record points the subdomain at the VPS, Let's Encrypt validates ownership over HTTP-01 on port 80 or DNS-01 for wildcards, and the certificate installs with Force SSL and HTTP/2 enabled

Esta seção lhe dá um certificado Let's Encrypt válido e com renovação automática para o seu subdomínio. O pré-requisito é aquele que pega as pessoas: o registro DNS A desse subdomínio já precisa apontar para o seu VPS, e a porta 80 precisa ser acessível pela internet, porque o Let's Encrypt verifica o domínio se conectando de volta a ele.

Com o proxy host criado, solicite o certificado:

  1. Edite o proxy host, abra a SSL aba.
  2. Sob Certificado SSL, escolha Request a new SSL Certificate.
  3. Ativar Force SSL e HTTP/2 Support. Ative o HSTS somente depois de confirmar que o HTTPS funciona corretamente, porque os navegadores podem armazenar a política em cache e tornar a recuperação de um erro de certificado ou de configuração de proxy mais difícil.
  4. Concorde com os termos do Let's Encrypt e salve.

Por padrão, o NPM usa o desafio HTTP-01 para nomes não curinga, validando cada hostname solicitado pela porta 80. Um certificado pode conter vários nomes não curinga, mas o HTTP-01 não pode emitir certificados curinga. Nomes curinga como *.example.com exigem o desafio DNS-01 com um provedor de DNS suportado. Para uma configuração normal de um subdomínio por serviço, o HTTP-01 é tudo o que você precisa, e as renovações são automáticas.

Se a solicitação do certificado falhar, verifique primeiro a porta 80. As causas comuns incluem uma porta 80 inacessível, uma regra incorreta de firewall na nuvem ou de grupo de segurança e um DNS que não terminou de propagar. O Let's Encrypt não pode validar um domínio que não consegue alcançar.

Protegendo o Painel de Administração do NPM em um VPS

Securing the Nginx Proxy Manager admin panel: public access to port 81 is blocked while admin access is allowed only through an SSH tunnel or private VPN to 127.0.0.1:81, with two-factor authentication and a patched version

A interface de administração na porta 81 é a principal exposição em uma implantação do NPM, e esta seção a protege. Isto é fortalecimento operacional, não uma auditoria de segurança: três coisas, feitas uma vez, e o perfil de risco cai acentuadamente.

Primeiro, e mais importante, mantenha a porta 81 vinculada a 127.0.0.1 conforme mostrado no arquivo Docker Compose. Acesse o painel pelo túnel SSH descrito anteriormente. Se você precisar de acesso remoto persistente, torne a interface de administração acessível apenas por uma VPN privada. Não publique a porta 81 no IP público do VPS.

Segundo, habilite a autenticação de dois fatores TOTP na sua conta de administrador. O NPM adicionou 2FA baseado em TOTP na versão 2.13.6, então qualquer instalação atual o possui. Ative-o.

Terceiro, mantenha o NPM atualizado e verifique a versão exata em vez de presumir que a tag latest é segura. A CVE-2026-40519 afeta as versões 2.9.14 até 2.15.1 e pode permitir a execução remota de código autenticada por meio de credenciais maliciosas de provedor de DNS. CVE-2026-50892 afeta a v2.14.0 e pode permitir que um atacante autenticado obtenha o material de chave privada do Let's Encrypt. Um problema anterior, a CVE-2025-50579, afetou a v2.12.3 por meio de uma falha de CORS que poderia expor tokens JWT. A regra prática é simples: mantenha a porta 81 privada, habilite a autenticação de dois fatores, fixe uma versão sabidamente corrigida e verifique os avisos de segurança antes de atualizar.

A porta 81 fica privada e o NPM fica atualizado. Faça essas duas coisas e os principais riscos conhecidos ficam muito mais fáceis de gerenciar em uma configuração normal de VPS único.

Dimensionando o Seu VPS para o Nginx Proxy Manager

O NPM em si é leve; a questão do dimensionamento é, na verdade, sobre o NPM mais os serviços que ficam atrás dele. A pegada em repouso do proxy raramente é a restrição. Uma instância do Nextcloud ou um blog Ghost usará mais recursos do que o próprio proxy.

Veja como os níveis funcionam na prática:

  • Base prática mínima: 1 GB RAM, 1 vCPU e 10 GB de armazenamento. Um guia de dimensionamento de terceiros usa a mesma base, mas trate-a como orientação de planejamento, e não como um requisito oficial do NPM. É suficiente para o NPM, o sistema operacional e alguns serviços leves, mas deixa pouca folga.
  • Confortável: 2 GB RAM, 1 vCPU, 20 GB de armazenamento. O NPM mais três a cinco serviços com espaço para respirar. Este é o ponto ideal para a maioria de quem faz auto-hospedagem.
  • Um passo acima: 4 GB RAM, 2 vCPU. Para oito a doze serviços, ou uma configuração com tráfego significativo onde você quer folga de CPU para o encerramento de TLS.

O número contra o qual você dimensiona é a soma dos apps atrás do proxy, não o NPM. Some as pegadas de RAM dos serviços que você pretende rodar, acrescente a pequena sobrecarga em repouso do proxy por cima e escolha o nível acima disso com margem.

Dimensionar o servidor é a parte fácil. Colocar o NPM em execução ainda significa provisionar o VPS, instalar o Docker, baixar a imagem e passar por aquela configuração de primeira execução. Se você preferir pular as etapas de provisionamento, o marketplace da Cloudzy tem uma implantação de um clique do Nginx Proxy Manager em um VPS NVMe. Ela sobe o contêiner em um servidor novo, então você vai direto ao painel e ao seu primeiro proxy host. De qualquer forma, os níveis de dimensionamento acima são a base do seu provisionamento.

Perguntas frequentes

Qual É a Diferença Entre o Nginx e o Nginx Proxy Manager?

O Nginx é o próprio servidor web e motor de proxy reverso, que você configura editando arquivos de texto. O Nginx Proxy Manager é uma aplicação Docker que roda o Nginx por baixo e adiciona uma interface web por cima, de modo que você gerencia proxy hosts e certificados Let's Encrypt por um painel em vez de escrever arquivos de configuração. O NPM é a camada de GUI; o Nginx é o motor que faz o trabalho.

O Nginx Proxy Manager Ainda Vale a Pena em 2026?

Sim, para usuários que preferem GUI e rodam uma pequena stack Docker, mas somente depois de verificar que a imagem que você implanta inclui as correções de segurança mais recentes. Em 12 de julho de 2026, a v2.15.1 é a última versão marcada, e o NVD a lista como afetada pela CVE-2026-40519. Se você prefere configuração como código, o Caddy continua sendo a melhor opção; a configuração respaldada por SQLite do NPM é sua principal limitação operacional.

Qual É a RAM Mínima para o Nginx Proxy Manager?

O NPM em si consome cerca de 50 MB de RAM em repouso. Um VPS de 1 GB é uma base prática, suficiente para o NPM mais alguns serviços leves. 2 GB é confortável quando você adiciona mais apps atrás do proxy. O requisito real de RAM é determinado pelos serviços atrás do NPM, não pelo próprio NPM.

Devo Expor a Porta 81 à Internet?

Não. Mantenha a porta 81 vinculada ao localhost e acesse-a por um túnel SSH, ou torne-a acessível apenas por uma VPN privada. Não publique a interface de administração no IP público do VPS.

Posso Rodar o Nginx Proxy Manager Sem Docker?

Não. O NPM é distribuído e projetado como um contêiner Docker, e não há instalação sem Docker suportada. Se você não puder ou não quiser rodar Docker, use o Nginx puro com o Certbot, ou o Caddy como um binário único.

O Nginx Proxy Manager Suporta Certificados Curinga?

Sim, por meio de um desafio DNS-01 com um provedor de DNS suportado configurado. Certificados padrão de hostname único usam o desafio HTTP-01 pela porta 80; certificados curinga (*.example.com) exigem o DNS-01 porque a autoridade certificadora valida o controle escrevendo um registro DNS em vez de alcançar um único host.

Partilhar

Mais do blogue

Continue a ler.

Pronto para implantar? A partir de $2,48/mês.

Cloud independente, desde 2008. AMD EPYC, NVMe, 40 Gbps. Reembolso em 14 dias.