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.comapontando 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.

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.

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

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

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

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.

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.

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.

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.

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.

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

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.

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.

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.

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.

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

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.

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.

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

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.

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.

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.

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.

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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.