Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Proxy Reverso - Redirecionando para minha aplicação node.js

Eu tenho uma API que desenvolvi para estudos recentemente que tem as rotas / , /books , /author , /publisher Na aula redirecionei do 80 para 8080 e de lá tinha um redirecionamento para php. Aproveitando do conceito tentei simular esses proxy reverso e funcionou, contudo fiquei com uma dúvida de como de fato realizar isso de uma maneira correta. Com a location /api precisei fazer o proxy para http://localhost:3000/ para conseguir acessar a raiz mas ao adicionar digamos /api/books tentava acessar //books contornei isso com uma regex fazendo um grupo de captura e eliminando /api e apenas adicionando a palavra books, author, publisher para conseguir acessar as rotas. Aparentemente fiz algo de errado já que precisei formatar com a regex poderia me apontar o que não executei da melhor maneira?

server {
  listen 8080;
  server_name localhost;

  location / {
    root  "C:/Users/cbris/dev/nginx";
    index index.html;
  }
  
  location /api {
    rewrite ^/api/(.*)$ /$1 break;
    proxy_pass http://localhost:3000/;
  }
  error_page 404 400 401 /erro.html;
}
1 resposta
solução!

Olá Israel. Tudo bem?

Você está no caminho certo para configurar o proxy reverso com NGINX para sua aplicação Node.js. O que você fez com a regex está correto para remover o prefixo /api antes de encaminhar a solicitação para o servidor Node.js. No entanto, há uma maneira de fazer isso usando a configuração location com um pequeno ajuste.

Em vez de usar rewrite, você pode ajustar o proxy_pass diretamente para incluir o caminho correto. Aqui está uma sugestão de como você pode configurar isso:

server {
  listen 8080;
  server_name localhost;

  location / {
    root  "C:/Users/cbris/dev/nginx";
    index index.html;
  }
  
  location /api/ {
    proxy_pass http://localhost: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;
  }
  
  error_page 404 400 401 /erro.html;
}

Note que no bloco location /api/, o caminho termina com uma barra /. Isso garante que o caminho após /api/ seja preservado quando a solicitação é passada para o backend. Assim, /api/books será encaminhado como /books para o servidor Node.js.

Além disso, adicionei algumas diretivas proxy_set_header que são boas práticas ao configurar um proxy reverso, pois ajudam a passar informações úteis para o servidor backend.

Espero ter entendido corretamente e conseguido ajudar. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!