---
title: "Como instalar Nginx Proxy Manager na VPS com Docker"
description: "Instale o Nginx Proxy Manager na VPS com Docker Compose, crie proxy hosts, emita SSL grátis e organize vários domínios sem expor o painel."
url: "https://streethosting.com.br/guias/vps/instalar-nginx-proxy-manager-vps"
category: "vps"
slug: "instalar-nginx-proxy-manager-vps"
datePublished: "2026-09-28"
dateModified: "2026-09-28"
author: "Equipe StreetHosting"
difficulty: "intermediario"
language: "pt-BR"
keywords:
  - "instalar nginx proxy manager"
  - "nginx proxy manager docker compose"
  - "nginx proxy manager ssl lets encrypt"
  - "proxy reverso interface web vps"
  - "nginx proxy manager varios dominios"
---

# Proxy reverso com interface web: Nginx Proxy Manager na VPS

O Nginx Proxy Manager coloca proxy reverso e certificados Let's Encrypt atrás de uma interface web. Veja como instalar com Docker Compose, ligar aplicações em containers ou no host e manter o painel fora da internet.

> **Resposta rápida**
>
> Para **instalar o Nginx Proxy Manager** na VPS, suba a imagem `jc21/nginx-proxy-manager` com Docker Compose publicando as portas 80 e 443, deixe a porta 81 do painel presa ao localhost e acesse por túnel SSH para trocar a credencial de administrador no primeiro login. Depois, cada domínio vira um proxy host com certificado Let's Encrypt emitido e renovado pela própria interface.

## Quando o Nginx Proxy Manager vale a pena

O Nginx Proxy Manager, conhecido pela sigla NPM, é uma interface web sobre o Nginx. Em vez de escrever um bloco de servidor para cada domínio, você preenche um formulário com o nome, o destino e a porta, e ele gera a configuração, pede o certificado e recarrega o Nginx. Ele brilha em um cenário específico: vários serviços em containers na mesma VPS, cada um com seu subdomínio, administrados por alguém que não quer editar arquivos de configuração toda semana.

| Abordagem | Pontos fortes | Quando escolher |
| --- | --- | --- |
| Nginx instalado no sistema | Controle total, menos camadas, sem Docker | Uma ou poucas aplicações e alguém confortável com arquivos de configuração |
| Nginx Proxy Manager | Interface web, SSL em dois cliques, listas de acesso | Vários containers e subdomínios, equipe que prefere painel |
| Coolify | Proxy, build, deploy automático e bancos no mesmo painel | Você quer uma plataforma de deploy completa, não só o proxy |

Se o seu caso é uma aplicação só, o caminho do [Nginx como reverse proxy](https://streethosting.com.br/guias/vps/configurar-nginx-reverse-proxy-vps) tem menos peças móveis. Se você quer que o próprio painel faça o build e o deploy a cada push, olhe para o [Coolify na VPS](https://streethosting.com.br/guias/vps/instalar-coolify-vps), que já traz o proxy embutido. Os dois não convivem nas mesmas portas 80 e 443.

Vale conhecer o limite antes de adotar. O NPM gera e sobrescreve os arquivos de configuração do Nginx dentro da pasta `data`, então edição manual nesses arquivos se perde na próxima alteração pelo painel. Ajustes finos entram pela aba Advanced de cada host, que aceita diretivas do Nginx. Configurações muito elaboradas, com cache de proxy, regras de rate limit por rota ou balanceamento entre vários destinos, ficam mais fáceis de manter em um Nginx escrito à mão.

## Instalação com Docker Compose

O requisito é ter o Docker Engine e o plugin Compose instalados pelo repositório oficial. Se ainda não tem, siga o guia de [instalar Docker no Ubuntu](https://streethosting.com.br/guias/vps/instalar-docker-ubuntu-vps) e volte aqui. Confira também se nenhum serviço ocupa as portas da web:

```
sudo ss -tlnp | grep -E ':(80|443) '
# se aparecer nginx ou apache2, pare o serviço:
sudo systemctl disable --now nginx
```

Crie uma pasta para o projeto e o arquivo `compose.yaml`:

```
mkdir -p ~/npm && cd ~/npm
nano compose.yaml
```

```
services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    container_name: npm
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "127.0.0.1:81:81"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    extra_hosts:
      - "host.docker.internal:host-gateway"
    networks:
      - proxy

networks:
  proxy:
    name: proxy
```

Suba o container e acompanhe a primeira inicialização. Se o seu usuário não está no grupo docker, coloque sudo antes dos comandos:

```
docker compose up -d
docker compose logs -f npm
```

Três decisões desse arquivo merecem explicação:

- **Porta 81 só no localhost:** o Docker publica portas passando por cima das regras do UFW. Com `"81:81"`, o painel ficaria aberto para a internet mesmo com o firewall dizendo o contrário. Com o prefixo `127.0.0.1`, só quem está na própria VPS alcança.
- **Rede com nome fixo:** a rede `proxy` vai ser compartilhada com os outros containers, que o NPM passa a encontrar pelo nome.
- **host.docker.internal:** cria um nome que aponta para a própria VPS, útil quando a aplicação roda fora do Docker, com PM2 ou systemd.

> **Dica**
>
> A tag `latest` facilita o primeiro teste. Em produção, fixe a versão atual publicada pelo projeto e atualize de propósito, lendo as notas da versão, em vez de receber mudanças sem saber.

## Primeiro acesso seguro ao painel

Como a porta 81 só existe no localhost, abra um túnel SSH a partir do seu computador. Ele leva a porta 8181 da sua máquina até a porta 81 da VPS:

```
ssh -L 8181:127.0.0.1:81 usuario@IP_DA_VPS
# com a sessão aberta, acesse no navegador:
# http://localhost:8181
```

Na primeira inicialização, o NPM gera as chaves internas, cria o banco SQLite na pasta `data` e prepara um usuário administrador. Entre com a credencial inicial indicada na documentação oficial da versão instalada e troque email e senha imediatamente, antes de criar qualquer host.

> **Atenção**
>
> Não publique a porta 81 na internet nem por alguns minutos. Robôs varrem faixas inteiras de IP atrás de painéis com credencial padrão, e qualquer IP público recebe esse tipo de visita o tempo todo.

## Criar o primeiro proxy host

Antes de tudo, aponte o domínio para a VPS com um registro A, como mostra o guia de [DNS para VPS](https://streethosting.com.br/guias/vps/apontar-dominio-vps-registro-dns). Em seguida, no painel, abra Hosts, Proxy Hosts e clique em Add Proxy Host. O formulário pede quatro dados principais: o nome de domínio, o esquema (http na maioria dos casos, porque o TLS termina no NPM), o host de destino e a porta de destino.

### Aplicação em outro container

É o cenário ideal. Coloque o container da aplicação na rede `proxy` e não publique porta nenhuma: o NPM fala com ele pela rede interna, e nada fica exposto por fora.

```
services:
  app:
    image: ghcr.io/sua-conta/sua-app:1.4.0
    container_name: minha-app
    restart: unless-stopped
    networks:
      - proxy

networks:
  proxy:
    external: true
```

No proxy host, use `minha-app` como Forward Hostname e a porta interna da aplicação (por exemplo 3000) como Forward Port. Marque Block Common Exploits e, se a aplicação usa WebSocket, Websockets Support.

### Aplicação rodando fora do Docker

Se a aplicação roda direto no sistema, com PM2 ou systemd, use `host.docker.internal` como destino. Dois ajustes são obrigatórios: a aplicação precisa escutar em uma interface que o container alcance (0.0.0.0, não 127.0.0.1) e o UFW precisa liberar o tráfego que vem da rede Docker. Descubra a faixa e libere só a porta da aplicação:

```
docker network inspect proxy --format '{{(index .IPAM.Config 0).Subnet}}'
# exemplo de saída: 172.18.0.0/16
sudo ufw allow from 172.18.0.0/16 to any port 3000 proto tcp
```

Aqui o UFW protege de verdade, porque a porta 3000 pertence a um processo do sistema e não a um container. Para a internet ela continua fechada; só a rede Docker alcança.

### A aplicação precisa enxergar o IP real

Com o proxy na frente, toda requisição chega à aplicação vinda do IP do NPM. O visitante real vai nos cabeçalhos `X-Forwarded-For` e `X-Real-IP`, e o protocolo original em `X-Forwarded-Proto`. Configure a aplicação para confiar nesses cabeçalhos só quando vêm do proxy, ou rate limit, logs e geração de links com HTTPS vão se basear no endereço errado. No Express isso é o ajuste `trust proxy`; em outros frameworks, procure por proxy headers ou forwarded headers na documentação.

## SSL automático com Let's Encrypt

Na aba SSL do mesmo proxy host, escolha Request a new SSL Certificate, informe um email para avisos de expiração e aceite os termos do Let's Encrypt. O NPM valida o domínio pela porta 80, então o DNS já precisa apontar para a VPS e a porta 80 precisa estar acessível pela internet.

- **Force SSL:** redireciona todo acesso HTTP para HTTPS. Ligue sempre.
- **HTTP/2 Support:** melhora o carregamento de páginas com muitos arquivos. Pode ligar.
- **HSTS Enabled:** manda o navegador lembrar que o site só funciona em HTTPS por um longo período. Ligue só depois de confirmar que tudo funciona, porque desfazer não é imediato para quem já visitou.

A renovação acontece dentro do container, sem cron na VPS. Para um certificado curinga, como `*.seu-dominio.com.br`, use a opção de desafio DNS: você escolhe o provedor de DNS, cola um token de API com permissão de editar a zona e o NPM cria o registro de validação sozinho.

## Vários domínios e recursos extras

Cada aplicação ganha o seu proxy host, e um mesmo host aceita vários nomes (com e sem www, por exemplo). Além do proxy simples, o painel traz recursos que resolvem situações comuns sem abrir arquivo de configuração:

| Recurso | Para que serve | Exemplo |
| --- | --- | --- |
| Redirection Hosts | Redirecionar um domínio inteiro para outro | Domínio antigo para o novo, com código 301 |
| Custom Locations | Mandar um caminho para outro destino | /api para o container da API, o resto para o site |
| Access Lists | Senha básica e liberação por IP | Proteger painéis internos e ferramentas de administração |
| Streams | Encaminhar TCP ou UDP sem HTTP | Repassar uma porta de jogo para outro container |
| 404 Hosts | Responder a domínios que você não quer atender | Nomes antigos que ainda apontam para o IP |
| Advanced | Diretivas extras do Nginx por host | client_max_body_size 50m para uploads grandes |

Um uso esperto é publicar o próprio painel por domínio e aposentar o túnel. Crie um proxy host `npm.seu-dominio.com.br` apontando para `127.0.0.1` na porta 81 (dentro do container, esse endereço é o próprio NPM), emita o certificado e associe uma Access List que só libere o seu IP ou exija senha. A porta 81 continua fechada para fora.

A aba Advanced aceita trechos de configuração que valem só para aquele host. Um exemplo comum para uma API que recebe uploads e respostas demoradas:

```
client_max_body_size 50m;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
```

Quem prefere entender o que o painel gera por baixo encontra o equivalente em arquivos no guia de [vários sites na mesma VPS com Nginx](https://streethosting.com.br/guias/vps/nginx-varios-sites-mesma-vps).

## Backup, atualização e erros comuns

Tudo o que importa fica nas pastas `data` e `letsencrypt`. Um backup simples é compactar a pasta do projeto e levar para fora da VPS. Atualizar é baixar a imagem nova e recriar o container:

```
cd ~/npm
sudo tar czf ~/npm-backup-$(date +%F).tar.gz data letsencrypt compose.yaml
docker compose pull
docker compose up -d
```

| Sintoma | Causa provável | Como resolver |
| --- | --- | --- |
| 502 Bad Gateway | Destino ou porta errados, ou container fora da rede proxy | Confira o nome do container, a porta interna e a rede com docker network inspect proxy |
| 502 com aplicação no host | Aplicação escuta só em 127.0.0.1 ou UFW bloqueia a rede Docker | Escute em 0.0.0.0 e libere a faixa da rede Docker para a porta |
| Internal Error ao pedir o certificado | DNS não aponta para a VPS ou porta 80 ocupada | Confirme com dig e verifique se outro serviço usa a porta 80 |
| Loop de redirecionamento | Force SSL junto com proxy externo que fala HTTP com a origem | No proxy externo, use modo que conecta à origem por HTTPS |
| 413 Request Entity Too Large | Limite padrão de upload do Nginx | Em Advanced, adicione client_max_body_size com o tamanho necessário |
| Painel não abre na porta 81 | Porta presa ao localhost, como planejado | Use o túnel SSH ou o proxy host do próprio painel |

Para as portas que ficam fora do Docker, como o SSH, mantenha o [firewall UFW](https://streethosting.com.br/guias/vps/firewall-ufw-vps-ubuntu) ativo. Lembre que ele não filtra portas publicadas por containers: a proteção delas vem de não publicar nada além de 80 e 443.

## Qual VPS escolher para o Nginx Proxy Manager

O NPM em si é leve. O que dimensiona a VPS são as aplicações atrás dele: cada container, cada banco e cada build consome memória e disco. Por isso a escolha começa pelo que você vai hospedar, e o proxy entra como um item pequeno na conta. Disco NVMe faz diferença quando há bancos de dados e imagens Docker sendo baixadas e extraídas.

| Cenário | Plano sugerido | Preço mensal |
| --- | --- | --- |
| Proxy e dois ou três sites leves | Xeon 2 vCPU, 2 GB DDR4, 20 GB NVMe | R$ 23,00 |
| Proxy, aplicações Node ou Python e um banco | Ryzen 2 vCPU, 4 GB DDR5, 40 GB NVMe | R$ 64,00 |
| Vários containers e bancos com folga | Xeon 6 vCPU, 8 GB DDR4, 80 GB NVMe | R$ 74,00 |
| Aplicações que dependem de clock alto | Ryzen 4 vCPU, 8 GB DDR5, 80 GB NVMe | R$ 114,00 |

As duas linhas estão na página de [planos VPS](https://streethosting.com.br/vps), com acesso root, NVMe, AntiDDoS incluso e datacenter em São Paulo, o que mantém a latência baixa para quem acessa do Brasil. Para aplicações que renderizam páginas no servidor ou fazem muito processamento por requisição, a [VPS Ryzen 9 9950X](https://streethosting.com.br/vps/ryzen) entrega mais velocidade por núcleo. A ativação leva até 60 segundos.

- [ ] Portas 80 e 443 livres antes de subir o container
- [ ] Porta 81 publicada só em 127.0.0.1
- [ ] Credencial de administrador trocada no primeiro login
- [ ] Aplicações na rede proxy, sem portas publicadas
- [ ] Force SSL ligado em todos os hosts
- [ ] Pastas data e letsencrypt copiadas para fora da VPS

## Perguntas frequentes

### Nginx Proxy Manager é o mesmo que Nginx?

Não exatamente. Ele roda um Nginx dentro de um container e gera a configuração por você a partir de uma interface web. Você ganha praticidade para criar proxies e certificados, mas perde parte do controle fino que tem editando os arquivos do Nginx direto.

### Posso usar o Nginx Proxy Manager junto com um Nginx instalado no sistema?

Não nas mesmas portas. Os dois precisam da 80 e da 443, então escolha um deles como porta de entrada. Se já existe um Nginx no sistema, pare e desabilite o serviço antes de subir o container, ou migre os sites para proxy hosts.

### Qual porta o painel do Nginx Proxy Manager usa?

O painel administrativo usa a porta 81. Mantenha essa porta fora da internet: publique só no localhost e acesse por túnel SSH, ou crie um proxy host com HTTPS e lista de acesso para o próprio painel.

### Como gerar certificado wildcard no Nginx Proxy Manager?

Certificado wildcard exige validação por DNS. Na aba SSL, marque a opção de desafio DNS, escolha o seu provedor de DNS e informe o token de API dele. O certificado curinga cobre todos os subdomínios e passa a ser renovado sozinho.

### Como fazer backup do Nginx Proxy Manager?

Copie a pasta do projeto inteira, com as pastas data e letsencrypt, para fora da VPS. Nelas ficam o banco SQLite com todos os hosts, as configurações geradas e os certificados. Restaurar é copiar as pastas de volta e subir o mesmo arquivo compose.

## Guias relacionados

- [Como instalar Docker no Ubuntu 22.04 ou 24.04 em VPS (guia direto ao ponto)](https://streethosting.com.br/guias/vps/instalar-docker-ubuntu-vps.md)
- [Como configurar o Nginx como reverse proxy na VPS](https://streethosting.com.br/guias/vps/configurar-nginx-reverse-proxy-vps.md)
- [Como instalar Coolify na VPS e fazer deploy com HTTPS](https://streethosting.com.br/guias/vps/instalar-coolify-vps.md)
- [Como hospedar vários sites na mesma VPS com Nginx](https://streethosting.com.br/guias/vps/nginx-varios-sites-mesma-vps.md)
- [Como instalar o Portainer para gerenciar Docker na VPS](https://streethosting.com.br/guias/vps/instalar-portainer-docker-vps.md)

## Produtos citados

- https://streethosting.com.br/vps
- https://streethosting.com.br/vps/ryzen

## Dados estruturados

```json
[
  {
    "@context": "https://schema.org",
    "@type": [
      "Article",
      "TechArticle"
    ],
    "headline": "Proxy reverso com interface web: Nginx Proxy Manager na VPS",
    "name": "Como instalar Nginx Proxy Manager na VPS com Docker",
    "abstract": "O Nginx Proxy Manager coloca proxy reverso e certificados Let's Encrypt atrás de uma interface web. Veja como instalar com Docker Compose, ligar aplicações em containers ou no host e manter o painel fora da internet.",
    "description": "Instale o Nginx Proxy Manager na VPS com Docker Compose, crie proxy hosts, emita SSL grátis e organize vários domínios sem expor o painel.",
    "datePublished": "2026-09-28",
    "dateModified": "2026-09-28",
    "author": {
      "@type": "Organization",
      "name": "Equipe StreetHosting"
    },
    "publisher": {
      "@type": "Organization",
      "name": "StreetHosting",
      "url": "https://streethosting.com.br"
    },
    "inLanguage": "pt-BR",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://streethosting.com.br/guias/vps/instalar-nginx-proxy-manager-vps"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Nginx Proxy Manager é o mesmo que Nginx?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Não exatamente. Ele roda um Nginx dentro de um container e gera a configuração por você a partir de uma interface web. Você ganha praticidade para criar proxies e certificados, mas perde parte do controle fino que tem editando os arquivos do Nginx direto."
        }
      },
      {
        "@type": "Question",
        "name": "Posso usar o Nginx Proxy Manager junto com um Nginx instalado no sistema?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Não nas mesmas portas. Os dois precisam da 80 e da 443, então escolha um deles como porta de entrada. Se já existe um Nginx no sistema, pare e desabilite o serviço antes de subir o container, ou migre os sites para proxy hosts."
        }
      },
      {
        "@type": "Question",
        "name": "Qual porta o painel do Nginx Proxy Manager usa?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "O painel administrativo usa a porta 81. Mantenha essa porta fora da internet: publique só no localhost e acesse por túnel SSH, ou crie um proxy host com HTTPS e lista de acesso para o próprio painel."
        }
      },
      {
        "@type": "Question",
        "name": "Como gerar certificado wildcard no Nginx Proxy Manager?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Certificado wildcard exige validação por DNS. Na aba SSL, marque a opção de desafio DNS, escolha o seu provedor de DNS e informe o token de API dele. O certificado curinga cobre todos os subdomínios e passa a ser renovado sozinho."
        }
      },
      {
        "@type": "Question",
        "name": "Como fazer backup do Nginx Proxy Manager?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Copie a pasta do projeto inteira, com as pastas data e letsencrypt, para fora da VPS. Nelas ficam o banco SQLite com todos os hosts, as configurações geradas e os certificados. Restaurar é copiar as pastas de volta e subir o mesmo arquivo compose."
        }
      }
    ]
  }
]
```
