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.