Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Como configurar um proxy reverso Nginx no Ubuntu

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.

Precisa de um VPS para sua configuração do Nginx?
Implante suas aplicações com acesso root e recursos de servidor flexíveis.
Conheça os planos de VPS →

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.

Como configurar um proxy reverso Nginx

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 80 aceita solicitações HTTP.
  • server_name especifica o domínio que o Nginx deve atender.
  • proxy_pass encaminha as solicitações à aplicação na porta 3000.
  • proxy_set_header transmite 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.

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.

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

O que é proxy_pass no Nginx?

proxy_pass informa ao Nginx para onde encaminhar as solicitações, como uma aplicação HTTP executada em 127.0.0.1:3000.

O proxy reverso Nginx pode atender a várias aplicações?

Sim. Você pode configurar domínios, subdomínios ou caminhos de URL diferentes para encaminhar solicitações a diferentes aplicações de backend.

Preciso de um domínio para usar um proxy reverso Nginx?

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.

O proxy reverso Nginx é gratuito?

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.

Table of Content

Um erro 502 Bad Gateway no Nginx geralmente significa que o Nginx não conseguiu receber

O erro 504 Gateway Timeout ocorre quando um servidor que atua como gateway ou proxy

Um servidor MCP é um programa que permite que aplicativos de IA se conectem a

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Rolar para cima