Um proxy reverso Nginx recebe solicitações dos visitantes de um site e as encaminha para outro servidor ou aplicação. Ele é comumente usado para tornar aplicações executadas em portas como a 3000 acessíveis por meio de um nome de domínio, sem expor suas portas internas à internet.
Neste tutorial, você configurará o Nginx no Ubuntu para encaminhar solicitações a uma aplicação local, conectar um domínio e habilitar HTTPS.
O que é um proxy reverso Nginx?
Um proxy reverso fica entre os visitantes e sua aplicação de backend.
Em vez de se conectarem diretamente a uma aplicação executada na porta 3000, os visitantes se conectam ao Nginx pelas portas padrão de HTTP ou HTTPS.
O Nginx encaminha a solicitação à aplicação e retorna a resposta dela.
O fluxo da solicitação é o seguinte:
Visitante → Nginx → Aplicação de backend
Essa configuração é comumente usada para Node.js, Python e outras aplicações web. Ela também pode oferecer suporte a terminação TLS, balanceamento de carga e tratamento centralizado de solicitações.
Pré-requisitos
Antes de começar, você precisará de:
- Um servidor Ubuntu 24.04 LTS com acesso sudo.
- Acesso SSH ao seu servidor.
- Um nome de domínio que aponte para o endereço IP público do seu servidor.
- Uma aplicação de backend que esteja escutando em uma porta local.
Neste exemplo, usaremos a porta 3000.
Se você não conhece o SSH, leia nosso guia para iniciantes sobre comandos SSH antes de continuar.

Etapa 1: Instale o Nginx no Ubuntu
Conecte-se ao seu servidor Ubuntu por SSH.
Atualize o índice de pacotes e instale o Nginx:
sudo apt update
sudo apt install nginx -y
Verifique se o Nginx está em execução:
sudo systemctl status nginx
Você deverá ver active (running).
Se o Nginx não estiver iniciado, execute:
sudo systemctl enable --now nginx
Você também pode acessar o endereço IP público do seu servidor em um navegador. A página padrão de boas-vindas do Nginx deverá aparecer se o acesso HTTP estiver permitido.
Se você usa UFW, permita o tráfego HTTP e HTTPS:
sudo ufw allow 'Nginx Full'
Verifique também as regras de firewall configuradas pelo seu provedor de hospedagem. Não desative o firewall para tornar o Nginx acessível.
Etapa 2: Inicie uma aplicação de backend para teste
Antes de configurar o proxy reverso, precisamos de uma aplicação para a qual o Nginx encaminhe as solicitações.
Para um teste simples, crie um diretório temporário:
mkdir -p ~/nginx-proxy-test
cd ~/nginx-proxy-test
Crie uma página HTML básica:
echo '<h1>Nginx Reverse Proxy Works!</h1>' > index.html
Agora, inicie o servidor HTTP integrado do Python:
python3 -m http.server 3000 --bind 127.0.0.1
Isso disponibiliza sua página de teste na porta 3000, acessível somente pelo endereço de loopback local.
Deixe este terminal em execução e abra uma segunda sessão SSH.
Verifique se a aplicação responde:
curl http://127.0.0.1:3000
Você deverá ver:
<h1>Nginx Reverse Proxy Works!</h1>
Esse servidor Python é apenas para demonstração. Para uma aplicação em produção, use o servidor de aplicações recomendado para ela e a configuração adequada de gerenciamento de serviços.
Etapa 3: Crie uma configuração de proxy reverso Nginx
Crie um novo bloco de servidor do Nginx:
sudo nano /etc/nginx/sites-available/app.example.com
Substitua app.example.com pelo seu domínio real.
Adicione a seguinte configuração:
server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Salve o arquivo.
Entenda a configuração
listen 80aceita solicitações HTTP.server_nameespecifica o domínio que o Nginx deve atender.proxy_passencaminha as solicitações à aplicação na porta 3000.proxy_set_headertransmite informações úteis sobre a solicitação original ao backend.
O backend deve entender e tratar com segurança os cabeçalhos encaminhados. Configure as aplicações para confiar nesses cabeçalhos somente quando as solicitações chegarem por meio do seu proxy confiável.
Etapa 4: Habilite e teste a configuração
Habilite seu novo bloco de servidor:
sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
Se o link já existir, não o recrie.
Verifique se há erros na configuração:
sudo nginx -t
Se o teste for bem-sucedido, recarregue o Nginx:
sudo systemctl reload nginx
Agora, acesse:
http://app.example.com
Se o DNS estiver apontando para o servidor correto e o backend de teste ainda estiver em execução, você deverá ver:
Nginx Reverse Proxy Works!
Se a página padrão do Nginx aparecer, verifique os registros DNS do seu domínio e a configuração de server_name.
Etapa 5: Habilite HTTPS com Let’s Encrypt
Para um site público, use HTTPS em vez de deixar o tráfego sem criptografia.
Primeiro, confirme que seu domínio aponta para o servidor correto e que a porta 80 está acessível para conexões de entrada. Isso é importante para o processo padrão de validação de certificados por HTTP.
Instale o Certbot usando o método oficial baseado em Snap:
sudo snap install --classic certbot
Se o comando certbot ainda não estiver disponível, crie o link para o comando:
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot
Em seguida, solicite um certificado:
sudo certbot --nginx -d app.example.com
Siga as instruções exibidas. O Certbot pode obter um certificado e configurar o Nginx para disponibilizar seu domínio por HTTPS.
Depois, teste a renovação do certificado:
sudo certbot renew --dry-run
Acesse:
https://app.example.com
Sua aplicação de teste agora deverá carregar por uma conexão criptografada.
Etapa 6: Verifique seu proxy reverso
Verifique a resposta HTTPS:
curl -I https://app.example.com
Para o backend Python do exemplo, uma resposta HTTP 200 OK indica que a solicitação chegou à aplicação.
Você também pode verificar quais processos estão escutando no seu servidor:
sudo ss -ltnp
Sua instalação do Nginx deverá escutar nas portas públicas de HTTP e HTTPS configuradas, enquanto o backend do exemplo escuta em 127.0.0.1:3000.
Lembre-se de que o servidor Python temporário será interrompido quando você encerrar a sessão do terminal. Aplicações em produção devem ser executadas sob um gerenciador de processos como o systemd.
Problemas comuns com o proxy reverso Nginx
502 Bad Gateway
Isso geralmente significa que o Nginx não conseguiu receber uma resposta válida do backend.
Verifique se sua aplicação está em execução e se a porta em proxy_pass está correta.
Nosso guia sobre como corrigir o erro 502 Bad Gateway no Nginx aborda logs, serviços upstream e problemas de conexão com mais detalhes.
504 Gateway Timeout
O erro 504 ocorre quando o gateway não recebe a resposta necessária do servidor upstream dentro do prazo.
Investigue as solicitações lentas da aplicação e o desempenho do backend antes de aumentar os tempos limite.
Consulte nosso guia de solução de problemas do erro 504 Gateway Timeout para obter mais instruções.
O domínio não carrega
Verifique se o registro A do seu domínio aponta para o endereço IP público correto, se as portas necessárias estão abertas no firewall e se o bloco de servidor do Nginx corresponde ao nome de host solicitado.
Perguntas frequentes
proxy_pass informa ao Nginx para onde encaminhar as solicitações, como uma aplicação HTTP executada em 127.0.0.1:3000.
Sim. Você pode configurar domínios, subdomínios ou caminhos de URL diferentes para encaminhar solicitações a diferentes aplicações de backend.
Não. Você pode testar um proxy reverso usando um endereço IP ou localmente. No entanto, um domínio simplifica a hospedagem pública e a obtenção de um certificado HTTPS padrão.
Sim. O Nginx de código aberto oferece a funcionalidade de proxy reverso sem exigir uma licença comercial.
Conclusão
Você configurou um proxy reverso Nginx no Ubuntu, encaminhou solicitações a uma aplicação local e habilitou HTTPS.
A mesma configuração básica pode ser adaptada para Node.js, Python e outras aplicações baseadas em HTTP, atualizando o endereço do backend em proxy_pass.
Antes de usar essa configuração em produção, certifique-se de que sua aplicação inicie automaticamente, seja executada com as permissões adequadas e conte com monitoramento e controles de segurança suficientes.