Nginx Proxy · 16 min read · Nov 20, 2025

Como Instalar e Usar o Nginx Proxy Manager com Docker

Um proxy reverso é um servidor web que pode ficar na frente de outro servidor web ou serviço web. Ele pode criptografar o tráfego de saída, atuar como um balanceador de carga, redirecionar tráfego e oferecer proteção. O servidor web Nginx pode ser usado como um servidor proxy na frente de servidores tradicionais, mas às vezes configurá-lo pode ser tedioso e causar problemas se não for feito corretamente.

O Nginx Proxy Manager é um aplicativo que facilita a configuração do Nginx como um servidor proxy, fornecendo uma interface gráfica do usuário (GUI) com recursos como suporte SSL embutido usando o Let’s Encrypt, suporte para múltiplos hosts, autenticação HTTP, listas de acesso e gerenciamento de usuários.

Este tutorial ensinará como instalar o Nginx Proxy Manager em um servidor Linux usando Docker. Vamos cobrir todas as distribuições Linux populares em um único tutorial.

Pré-requisitos

  • Um servidor Linux rodando Ubuntu/Debian/CentOS/Alma Linux/Rocky Linux com um mínimo de 1 GB de RAM.
  • Um usuário não-root com privilégios sudo.
  • Um nome de domínio totalmente qualificado (FQDN) como npm.example.com apontando para o servidor.

Passo 1 - Configurar o Firewall

Cent OS/Rocky Linux/Alma Linux

Você deve ter o firewall Firewalld instalado. Verifique o status do firewall.

$ sudo firewall-cmd --state
running

Abra as portas 80, 81 e 443.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=81/tcp

Recarregue o firewall para habilitar as mudanças.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Sistemas Ubuntu e Debian usam ufw (Uncomplicated Firewall) por padrão.

Verifique se o firewall está rodando.

$ sudo ufw status

Se estiver rodando, então abra as portas 80, 81 e 443.

$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443

Abra a porta SSH se o firewall não estiver rodando.

$ sudo ufw allow "OpenSSH"

Habilite o firewall se não estiver rodando.

$ sudo ufw enable

Se estiver rodando, recarregue-o para aplicar as mudanças.

$ sudo ufw reload

Passo 2 - Instalar o Docker

Cent OS/Rocky Linux/Alma Linux

Execute o seguinte comando para instalar o Docker.

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Habilite e inicie o serviço Docker.

$ sudo systemctl start docker --now

Adicione seu nome de usuário ao grupo Docker.

$ sudo usermod -aG docker $USER

Desconecte-se do sistema e faça login novamente para aplicar a mudança.

Passo 3 - Instalar o Docker Compose

Baixe e instale o binário do Docker Compose.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Aplique permissão executável ao binário.

$ sudo chmod +x /usr/local/bin/docker-compose

Passo 4 - Criar o Arquivo Docker Compose

Crie um diretório para o Nginx Proxy Manager.

$ mkdir ~/nginx-proxy

Mude para o diretório.

$ cd ~/nginx-proxy

Crie diretórios para dados do usuário e certificados SSL.

$ mkdir {data,letsencrypt}

Crie e abra o arquivo docker-compose.yml para edição.

$ nano docker-compose.yml

Cole o seguinte código nele.

version: "3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # Porta HTTP Pública
      - '443:443' # Porta HTTPS Pública
      - '81:81' # Porta Web Admin
      # Adicione qualquer outra porta de Stream que você deseja expor
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Descomente a linha abaixo se o IPv6 não estiver habilitado no seu host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - npm-db
    networks:
      - npm-nw
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-nw:
    external: true

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Vamos analisar o arquivo. A primeira parte do arquivo é onde importamos a imagem do Nginx Proxy Manager e definimos algumas variáveis de ambiente na forma de credenciais de banco de dados. Também expomos as portas 80, 81 e 443 para o servidor para acesso. Você pode expor mais portas, como 21, para acesso FTP. Você pode desabilitar o suporte ao IPV6 descomentando a linha DISABLE_IPV6: 'true'. Mapeamos vários diretórios do nosso host para o Docker para armazenamento de dados e SQL.

Estamos usando duas redes aqui. Uma é a rede interna npm-internal para conectar o proxy manager e o banco de dados. Esta é opcional, pois é criada automaticamente. Mas aqui, estamos fazendo isso manualmente dando um nome de nossa escolha.

Adicionamos uma rede externa ao contêiner do proxy manager chamada npm-nw. Esta rede é essencial porque você pode usá-la para conectar o proxy manager a qualquer outro contêiner Docker que você instalar. Usar uma rede permitirá que você conecte qualquer contêiner diretamente sem a necessidade de expor suas portas para o servidor.

Passo 5 - Executar o Nginx Proxy Manager

Antes de lançar o contêiner Docker, precisamos criar a rede externa npm-nw. Redes internas são criadas automaticamente. Execute o seguinte comando para criar a rede externa.

$ docker network create npm-nw

Inicie o contêiner Docker usando o seguinte comando.

$ docker-compose up -d

Verifique o status dos contêineres.

$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED              STATUS              PORTS                                                                                  NAMES
c91ca0ddca97   jc21/nginx-proxy-manager:latest   "/init"                  About a minute ago   Up About a minute   0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   npm-app
1738d71b95da   mariadb:latest                    "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp                                                                               npm-db

Passo 6 - Acessar o Nginx Proxy Manager

Agora você pode acessar seu Nginx Proxy Manager através da URL http://yourserverIP:81. Você deve ver a seguinte tela de login.

Tela de Login do Nginx Proxy Manager

Digite as seguintes credenciais padrão para fazer login.

Endereço de e-mail: [email protected] Senha: changeme

Em seguida, você será imediatamente solicitado a definir um nome e um endereço de e-mail.

Popup Editar Usuário do Nginx Proxy Manager

Clique no botão Salvar, e você será solicitado a definir uma nova senha.

Popup Definir Senha do Nginx Proxy Manager

Clique no botão Salvar novamente, e agora você pode começar a usar o aplicativo.

Dashboard do Nginx Proxy Manager

Se você abrir a URL http://yourserverIP em seu navegador, você será levado a uma página padrão que o proxy manager configurou.

Site Padrão do Nginx Proxy Manager

Passo 7 - Configurando Nome de Domínio e SSL para o Nginx Proxy Manager

Vamos definir um nome de domínio para acessar o Nginx Proxy Manager. Este passo é opcional, mas é útil se você quiser colocar o aplicativo atrás do SSL.

Clique em Hosts >> Proxy Hosts no menu do dashboard para abrir a página de Proxy Hosts. A partir daí, clique no botão Adicionar Proxy Host para prosseguir.

Tela Novo Proxy Host do Nginx Proxy Manager

Adicione o nome FQDN ( npm.example.com) e clique nele. Digite o endereço IP do seu servidor e 81 como a Porta de Encaminhamento.

Mude para a aba SSL.

Configurar SSL do Nginx Proxy Manager

Selecione Solicitar um novo Certificado SSL no menu suspenso. Selecione as opções Forçar SSL e suporte HTTP/2. Se você quiser habilitar HSTS, você também pode habilitar isso. Se você tiver seu domínio configurado via Cloudflare, não habilite a opção Forçar SSL, caso contrário, você ficará preso em um loop de redirecionamento.

Digite seu endereço de e-mail, concorde com os Termos de Serviço (TOS) do Let’s Encrypt e clique no botão Salvar para finalizar.

Lista de Proxy Hosts do Nginx Proxy Manager

Seu domínio deve estar ativo e funcionando. Tente abrir https://npm.example.com em seu navegador, e você deve ver a tela de login do Nginx Proxy Manager.

Você pode fazer o mesmo para a página de aterrissagem padrão e atribuí-la a um nome de domínio como https://example.com. Basta mudar a porta de 81 para 81 ao configurar o proxy host.

Passo 8 - Usar o Nginx Proxy Manager com outro aplicativo web Docker

Agora que instalamos o proxy manager, é hora de colocá-lo em uso. A primeira coisa que faremos é usá-lo para hospedar outro aplicativo web Docker. Para isso, instalaremos o blog Ghost. Se você quiser aprender mais, confira nosso tutorial sobre como instalar o Ghost usando Docker em um servidor Ubuntu.

Crie outro diretório para seu blog Ghost.

$ mkdir ~/ghost

Mude para o diretório Ghost.

$ cd ~/ghost

Crie dois diretórios para o conteúdo e o banco de dados.

$ mkdir {content,mysql}

Mesmo que você esteja usando a mesma imagem MySQL, deve manter os dados e seus contêineres separados dos do Proxy manager. Isso ajudará a isolar quaisquer problemas que você possa encontrar e permitirá que você mova as coisas caso precise.

Crie e abra o arquivo Docker compose para edição.

$ nano docker-compose.yml

Cole o seguinte código. Substitua example.com pelo seu nome de domínio real para seu blog Ghost. Digite os detalhes SMTP se você quiser receber e-mails. Você pode removê-los se não precisar deles.

version: '3.3'
services:

  ghost-app:
    image: ghost:latest
    container_name: ghost-app
    restart: always
    depends_on:
      - ghost-db
    environment:
      url: https://ghost.example.com
      database__client: mysql
      database__connection__host: ghost-db
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
      mail__transport: SMTP
      mail__options__host: {Seu host de serviço de e-mail}
      mail__options__port: {Sua porta de serviço de e-mail}
      mail__options__secureConnection: {true/false}
      mail__options__service: {Seu serviço de e-mail}
      mail__options__auth__user: {Seu nome de usuário}
      mail__options__auth__pass: {Sua senha}
    volumes:
      - /home//ghost/content:/var/lib/ghost/content
    networks:
      - npm-nw
      - ghost-network

  ghost-db:
    image: mariadb:latest
    container_name: ghost-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    volumes:
      - /home//ghost/mysql:/var/lib/mysql
    networks:
      - ghost-network

networks:
  ghost-network:
  npm-nw: 
    external: true

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Como você pode ver, conectamos o contêiner Ghost ao Nginx Proxy Manager usando a rede externa npm-nw. Dessa forma, não estamos expondo as portas do Ghost para o sistema. Também usamos uma rede interna ghost-network para conectar nosso aplicativo Ghost e o contêiner de banco de dados correspondente.

Inicie o contêiner.

$ docker-compose up -d

Configurar Ghost no Nginx Proxy Manager

Agora, precisamos definir o proxy reverso para nossa instalação do Ghost. Abra o Nginx Proxy Manager em seu navegador, vá para Dashboard >> Hosts >> Proxy Host, e adicione um novo Proxy Host.

Configurar Blog Ghost no Nginx Proxy Manager

Adicione o nome de domínio que você escolheu para seu blog Ghost. Para o valor Hostname/IP, digite o nome do seu contêiner. Neste caso, seria ghost-app. Não podemos adicionar o endereço IP aqui porque não expomos a porta do Ghost para o servidor, e o proxy Nginx não poderá acessar o Ghost via IP. Portanto, usamos o nome do contêiner, que o NPM pode acessar usando a rede Docker npm-nw, que criamos. Use 2368 como a porta, a porta padrão usada pelo Blog Ghost. Verifique as outras opções conforme mostrado na captura de tela acima.

Em seguida, mude para a aba SSL e crie um novo certificado SSL seguindo o passo 6. Como você estará enviando conteúdo para seu blog Ghost, seria bom definir um tamanho máximo de upload para seus uploads.

Felizmente, o NPM permite que você adicione configurações personalizadas. Mude para a aba Avançado e insira client_max_body_size 50m; na caixa.

Configuração Avançada do Blog Ghost NPM

Clique no botão Salvar para finalizar a adição do proxy host. Você deve conseguir acessar seu blog Ghost através da URL https://ghost.exampl.com

Página Inicial do Blog Ghost

Passo 9 - Usar o Nginx Proxy Manager como um serviço de redirecionamento

Vamos ver como você pode usar o NPM para redirecionar um domínio para outro facilmente. Para fazer isso, visite Dashboard >> Hosts >> Redirection Hosts. A partir daí, clique no botão Adicionar Redirection Host para começar.

Host de Redirecionamento do Nginx Proxy Manager

Digite o nome de domínio que você deseja encaminhar. E insira o domínio de redirecionamento. O domínio de redirecionamento já deve estar configurado. Deixe o esquema como automático. Dependendo de sua necessidade, você pode escolher http ou https. Selecione o Código HTTP correto e marque as opções Preservar Caminho e Bloquear Exploits Comuns. Se você estiver usando um esquema automático ou https, certifique-se de ter selecionado ou criado um certificado SSL usando o NPM. Clique em Salvar para finalizar a adição do seu host de redirecionamento.

Seu domínio example.com deve começar a redirecionar para blog.example.com.

Outros usos do Nginx Proxy Manager

Existem outras duas maneiras nas quais você pode usar o Nginx Proxy Manager. Você pode usá-lo como um host 404, o que significa que pode usar um domínio como uma página de aterrissagem para mostrar aos motores de busca que as páginas do domínio não existem. O passo inclui apenas inserir um domínio e configurar SSL para ele. Você também pode usar isso como uma oportunidade para rastrear os logs para o nome de domínio e visualizar o tráfego de referência.

A outra funcionalidade é usar o NPM como um host de stream. Você pode usar esse recurso para encaminhar portas TCP/UDP para outro computador na rede. Isso é útil se você estiver hospedando servidores de jogos. A única coisa que ele requer é que você insira a porta de entrada, o domínio ou endereço IP de redirecionamento, a porta de redirecionamento e selecione o tipo de porta.

Novo Popup de Host de Stream do Nginx Proxy Manager

Usar o Nginx Proxy Manager para hospedar um site estático

O Nginx Proxy Manager pode hospedar sites simples estáticos ou dinâmicos também. Para fazer isso, adicione um novo proxy host e escolha 127.0.0.1 como o Domínio de Encaminhamento e 80 como a porta.

Host de Site Estático do Nginx Proxy Manager

Na aba Avançado, insira a configuração especificando o diretório raiz. Certifique-se de que o diretório raiz para o site esteja montado na configuração inicial do Docker compose. Aqui estamos usando o diretório /data/static para hospedar nosso site estático.

Configuração Avançada do Site Estático do Nginx Proxy Manager

Clique em Salvar para finalizar, e seu site deve estar acessível. Você pode hospedar qualquer tipo de site usando o proxy manager.

Página de Demonstração do Site Estático

Passo 10 - Recursos Diversos

Usar o Recurso de Controle de Acesso do Nginx Proxy Manager

Você pode usar o recurso de Listas de Acesso do NPM para habilitar autenticação HTTP ou bloquear faixas de IP. Abra o NPM e visite a página Dashboard >> Access Lists.

Clique no botão Adicionar Lista de Acesso para começar.

Nova Lista de Acesso do Nginx Proxy Manager

Você pode nomear sua configuração de Lista de Acesso (ACL). A aba Satisfazer Qualquer se marcada, permitirá acesso se o cliente cumprir qualquer uma das condições especificadas. Se um cliente passar pela autenticação HTTP, mas pode falhar no acesso baseado em IP, ele será permitido. Mas se a opção Satisfazer Qualquer não estiver marcada, o cliente precisará cumprir todas as condições.

O recurso Passar Autenticação para o Host encaminhará o recurso de autenticação para o servidor host.

Em seguida, mude para a aba Autorização. Aqui você pode criar um nome de usuário e senha para o método de autenticação HTTP. Para adicionar mais de um usuário, clique no botão Adicionar. Você pode adicionar até 5 usuários. E há um bug com o botão Adicionar, então use o botão primeiro e depois preencha os detalhes. Se você preencher os detalhes e clicar no botão depois para adicionar outro usuário, ele limpará os dados do usuário anterior.

Configuração de Autorização do Nginx Proxy Manager

Mude para a aba Acesso. Aqui você pode definir quais endereços IP devem ter acesso ou serem negados.

Aba de Acesso IP do Nginx Proxy Manager

Clique em Salvar para finalizar.

Para usar esta lista de acesso, você precisa selecioná-la ao adicionar seu proxy host. Como no exemplo para o Blog Ghost abaixo, selecionamos nossa lista de acesso.

Suporte à Lista de Acesso do Proxy do Nginx Proxy Manager

Habilitar Suporte para mais nomes de domínio

À medida que o número de hosts e domínios cresce, seu Nginx pode ficar sem espaço de hash ou pode enfrentar problemas de memória. Podemos adicionar uma configuração personalizada que se aplicará a todos os hosts para resolver esse problema.

Para fazer isso, crie o diretório custom dentro de ~/nginx-proxy/data/nginx.

$ sudo mkdir ~/nginx-proxy/data/nginx/custom

Crie e abra o arquivo http.conf dentro deste diretório.

$ sudo nano ~/nginx-proxy/data/nginx/custom/http.conf

Cole as seguintes linhas nele.

proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

O Nginx deve aceitar automaticamente esses valores. Se isso não acontecer, você pode reiniciar o contêiner NPM usando o seguinte comando.

$ docker restart npm-app

Redirecionar Página de Aterrissagem Padrão

No passo 6, você vê a página padrão quando digita a URL http://. Se você quiser mudar isso, é possível fazer isso. Para fazer isso, visite a Página de Configurações. Clique nos três pontos no lado direito e clique no botão Editar.

Edição da Página de Aterrissagem do Nginx Proxy Manager

Você pode definir a página de aterrissagem para agir como uma página 404, página de redirecionamento ou adicionar HTML personalizado a ela usando a opção Página Personalizada. Se você selecionar Redirecionar, precisará especificar a URL de destino.

Configurações do Site Padrão do Nginx Proxy Manager

Este é o HTML personalizado que usamos para nosso propósito.



  
    Nada Aqui
    
    
    
    
  
  
    

Oops!

Desculpe pelo inconveniente, mas você não deveria estar aqui. Você não encontrará nada aqui. Esta página foi configurada para o Guia do Nginx Proxy Manager do HowtoForge. Talvez, algum dia, ela mostre algo.

Clique em Salvar para finalizar. Sua página de aterrissagem deve ser alterada para algo como abaixo.

Página de Aterrissagem Personalizada do Nginx Proxy Manager

Passo 11 - Atualizar o Nginx Proxy Manager

Para atualizar o NPM, primeiro, pare os contêineres.

$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans

Baixe as imagens mais recentes.

$ docker-compose pull

Inicie os contêineres novamente.

$ docker-compose up -d

Conclusão

Isso conclui nosso tutorial onde você instalou o Nginx Proxy Manager e aprendeu como usá-lo para adicionar um proxy host para outro contêiner Docker, usá-lo como um serviço de redirecionamento e controlar o acesso usando-o. Se você tiver alguma dúvida, poste nos comentários abaixo.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.