Servidor & DevOps 70 visualizações

Como configurar um proxy reverso com Nginx na frente de uma aplicação em outra porta

Ver no WHMCS
Vou escrever o guia diretamente em HTML, sem usar prints (nenhum da lista corresponde a Nginx/VPS/terminal, então melhor não ilustrar). Configurar um servidor pra rodar sua aplicação por trás de um proxy reverso é um passo clássico quando você tem uma API, um app Node.js, Python, ou qualquer serviço que "escuta" numa porta diferente da 80/443. Vamos lá, com calma, um passo de cada vez.

O que é um proxy reverso (e por que você precisa dele)

Imagine que sua aplicação está rodando na sua VPS, mas numa porta "escondida", tipo 3000 ou 8080. Se você deixar do jeito que está, seus visitantes vão precisar digitar seudominio.com:3000 pra acessar — feio, pouco profissional e, o pior, sem HTTPS.

O Nginx como proxy reverso resolve isso: ele fica "na porta da frente" (80 e 443, as portas padrão da web), recebe as visitas normais em https://seudominio.com e, por baixo dos panos, repassa cada requisição pra sua aplicação na porta interna. O visitante nunca precisa saber que existe uma porta 3000 rodando ali atrás.

Dica da Sensei: pense no Nginx como o recepcionista de um prédio. Ele fica na entrada, recebe todo mundo educadamente e só depois encaminha cada visitante pra sala certa lá dentro.

Pré-requisitos

  • Uma VPS com acesso root/SSH (essa configuração é feita por linha de comando, então não se aplica à hospedagem compartilhada com cPanel).
  • Sua aplicação já rodando e escutando numa porta local, por exemplo 127.0.0.1:3000.
  • O domínio já apontando pro IP da sua VPS (registro A no DNS). Se ainda não fez isso, ajuste primeiro e espere a propagação antes de seguir.

Passo a passo

1. Instale o Nginx

Conecte na sua VPS via SSH e instale o pacote. Em distribuições baseadas em Debian/Ubuntu:

sudo apt update
sudo apt install nginx -y

Em AlmaLinux/CentOS:

sudo dnf install nginx -y
sudo systemctl enable --now nginx

2. Confirme que sua aplicação está rodando

Antes de configurar o proxy, teste se a aplicação responde localmente. Se ela está na porta 3000, rode:

curl http://127.0.0.1:3000

Se aparecer alguma resposta (mesmo que um erro HTML), ótimo — o app está de pé. Se der "Connection refused", resolva isso primeiro: não adianta configurar o proxy pra uma porta que não tem nada escutando.

3. Crie o arquivo de configuração do site

Crie um novo arquivo de configuração pro seu domínio (em vez de mexer no arquivo padrão):

sudo nano /etc/nginx/sites-available/seudominio.com

Cole o conteúdo abaixo, trocando seudominio.com pelo seu domínio real e 3000 pela porta da sua aplicação:

server {
    listen 80;
    server_name seudominio.com www.seudominio.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
        proxy_cache_bypass $http_upgrade;
    }
}
Por que esses cabeçalhos? Eles garantem que sua aplicação "enxergue" corretamente o domínio original, o IP real do visitante e, se você usa WebSocket (chat, notificações em tempo real), que a conexão não caia. Vale copiar exatamente assim.

4. Ative o site

Em servidores Debian/Ubuntu, crie um link simbólico pra pasta de sites ativos:

sudo ln -s /etc/nginx/sites-available/seudominio.com /etc/nginx/sites-enabled/

Em AlmaLinux/CentOS, normalmente basta colocar o arquivo direto em /etc/nginx/conf.d/seudominio.com.conf — não existe a pasta sites-available por padrão.

5. Teste a configuração antes de aplicar

Esse passo é sagrado: o Nginx tem um comando que testa se a sintaxe está correta sem derrubar o servidor:

sudo nginx -t

Se aparecer syntax is ok e test is successful, pode seguir. Se der erro, ele te mostra exatamente a linha do problema — revise o arquivo com calma.

6. Recarregue o Nginx

sudo systemctl reload nginx

Pronto! Agora, ao acessar http://seudominio.com, o Nginx vai receber a visita e repassar tudo pra sua aplicação na porta interna, de forma transparente.

7. Adicione HTTPS (essencial)

Nunca deixe seu site apenas em HTTP. Com o domínio já resolvendo pro Nginx, o jeito mais simples de ativar SSL gratuito é com o Certbot:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d seudominio.com -d www.seudominio.com

O Certbot detecta automaticamente o bloco server que você criou, emite o certificado e já ajusta a configuração pra redirecionar HTTP → HTTPS pra você. Simples assim.

Erros comuns (e como resolver)

  • 502 Bad Gateway: geralmente significa que sua aplicação não está rodando ou está numa porta diferente da que você configurou no proxy_pass. Confira com o comando curl do passo 2.
  • Configuração não aplica: lembre de sempre rodar nginx -t e depois systemctl reload nginx — só editar o arquivo não é suficiente.
  • Site cai quando eu fecho o terminal SSH: isso é sobre a aplicação, não sobre o Nginx — use um gerenciador de processos (como PM2, para Node.js, ou um serviço systemd) pra manter o app rodando em segundo plano.
Última dica da Sensei: proxy reverso é uma configuração de servidor — se você não tem familiaridade com terminal e SSH, não tem problema nenhum em pedir apoio ao suporte da GeHost pelo painel. Configuração errada de Nginx pode deixar seu site fora do ar, então prefira ir com calma e testar cada passo antes de seguir pro próximo.
Precisa de Ajuda?

Nossa equipe está pronta para resolver suas dúvidas.