📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Cap. 09 (Nginx) do Guia de Redes. Recomendado revisar antes de começar.

🚀 Nginx com Balanceamento de Carga e Proxy Reverso

v1.0 — Nginx, Load Balancing Round-Robin, Reverse Proxy e Docker Compose

Trilha de Especialização Pedagógica — Projeto 1 de 5

🎓 Nível Profissional Simulado: Engenheiro DevOps Júnior / SRE Trainee. Nenhuma grande aplicação roda em um único servidor. Engenheiros de infraestrutura projetam sistemas com Proxy Reverso e Balanceadores de Carga, garantindo que, se um nó cair, o tráfego seja redirecionado instantaneamente sem que o usuário perceba.

—`

🎯 Objetivo & Escopo do Projeto

Configurar e executar um ambiente de Alta Disponibilidade com Nginx atuando como Proxy Reverso e Balanceador de Carga no algoritmo Round-Robin, distribuindo requisições HTTP entre múltiplos contêineres de backend isolados via Docker Compose.

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Líder de Infraestrutura & Cloud)

“Nosso servidor web atual cai sempre que recebe mais de 500 acessos simultâneos. Precisamos criar um cluster com 3 instâncias da nossa aplicação rodando em contêineres e um Nginx na frente distribuindo o tráfego de forma alternada (Round-Robin). Se uma das instâncias for desligada, o Nginx deve parar de mandar requisições para ela imediatamente.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Configurar bloco upstream no Nginx apontando para as instâncias de backend. “3 instâncias da aplicação”
RF02 Funcional Distribuir requisições no padrão Round-Robin alternando entre os nós. “distribuindo de forma alternada”
RF03 Funcional Subir o cluster completo com um único comando via docker-compose up. “rodando em contêineres”
RNF01 Não-Funcional Latência adicional de proxy inferior a 1 milissegundo. Performance de Rede
RNF02 Não-Funcional Isolamento de rede em bridge interna do Docker. Segurança de Infra

—`

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como usuário, quero acessar a URL principal e ser atendido por um dos nós ativos do cluster. Alta
US02 Como SRE, quero escalar instâncias de backend horizontalmente alterando apenas o arquivo de configuração. Alta

—`

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Deploy)

# Branch da funcionalidade
git checkout -b feature/US01-nginx-loadbalancer

# Subir o cluster completo
docker-compose up -d

# Visualizar a distribuição de requisições nos logs
docker-compose logs -f nginx

—`

🛠️ Fase 4 — Implementação Guiada (nginx.conf)

events { worker_connections 1024; }

http {
    upstream backend_cluster {
        server app_node_1:3000;
        server app_node_2:3000;
        server app_node_3:3000;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend_cluster;
            proxy_set_header Host $host; proxy_set_header X-Real-IP$remote_addr;
        }
    }
}

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd infra_nginx_01_nodejs

2. Execute a aplicação ou testes

terraform init && terraform plan
# ou docker-compose up -d

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/infra_nginx_01_nodejs`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Carga

# Enviar 6 requisições consecutivas para validar alternância de nós (1 -> 2 -> 3 -> 1 -> 2 -> 3)
for i in {1..6}; do curl -s http://localhost:8080/api/status; echo ""; done

—`

✅ Checkpoint Final

  1. Tráfego balanceado uniformemente entre todos os contêineres.
  2. Proxy reverso configurado com cabeçalhos X-Real-IP.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal