Configurarea Nginx ca Reverse Proxy în Nginx

Proxy și Rutare Nginx Core 1.0+

Rutarea traficului extern către aplicații backend interne (Node.js, Python, Go, PHP) cu transmiterea sigură a antetelor originale.

Sintaxă
proxy_pass http://upstream_backend; în blocul location

Rolul fundamental al serverului Nginx în producție este cel de Reverse Proxy: acționează ca o barieră de protecție la intrare, preluând cererile HTTP/HTTPS de la clienți și transmițându-le către aplicațiile interne care ascultă pe porturi locale izolate (cum ar fi un API Node.js pe portul 3000 sau un microserviciu Go pe 8080).

O configurare corectă de reverse proxy nu se limitează doar la directiva `proxy_pass`: este critic să transmiți antetele esențiale precum Host, X-Real-IP și X-Forwarded-For, astfel încât aplicația backend să cunoască adresa IP reală a utilizatorului și protocolul folosit.

De asemenea, configurarea include suport pentru conexiuni persistente HTTP/1.1 și antetele de Upgrade necesare pentru funcționarea fluidă a canalelor bidirecționale de tip WebSockets.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
proxy_pass Adresa internă către care se redirecționează traficul.
proxy_set_header Host $host Păstrează numele domeniului original solicitat de client.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for Transmite lanțul complet de adrese IP ale clientului.
proxy_http_version 1.1 Forțează versiunea HTTP/1.1 necesară pentru conexiuni persistente și WebSockets.
proxy_read_timeout Timpul maxim de așteptare a răspunsului de la backend înainte de a returna 504 Gateway Timeout.

Exemple practice și cod

Exemplul 1: Bloc complet de server Nginx pentru un API Node.js cu suport WebSockets

Configurația de referință utilizată în producție.

server {
    listen 80;
    server_name api.dexblog.ro;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        
        # Suport pentru WebSockets și SSE:
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        
        # Transmiterea IP-ului real:
        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;
        
        # Timeout optimizat pentru sarcini lungi de AI:
        proxy_read_timeout 120s;
    }
}

Rezultat & Impact

Rutare de mare viteză cu suport pentru streamuri asincrone și IP-uri reale ale clienților.

Greșeli frecvente și bune practici

  • Adăugarea accidentală a unui slash final la `proxy_pass http://127.0.0.1:3000/`, ceea ce modifică comportamentul URI-ului și taie prefixele de rute.
  • Omiterea antetului `X-Forwarded-Proto`, determinând aplicațiile backend să genereze redirecturi infinite de tip HTTP-to-HTTPS.

Ghiduri și noțiuni înrudite