Proxy layer 4 vs layer 7 in Nginx

2 marzo 2026
4 min di lettura

Introduzione

Per capire cosa può (e non può) fare Nginx su una connessione, è fondamentale distinguere tra:

  • Proxy layer 4 (trasporto, tipicamente TCP)
  • Proxy layer 7 (applicazione, es. HTTP, gRPC, WebSocket)

Questa distinzione viene dal modello OSI e influisce direttamente su:

  • Quante informazioni Nginx vede del traffico
  • Che tipo di regole di routing si possono applicare
  • Se è possibile fare caching, riscritture e ispezioni dettagliate

Richiamo sul modello OSI

In modo semplificato:

  • Layer 3: IP (indirizzi sorgente/destinazione)
  • Layer 4: TCP/UDP (porte, numeri di sequenza, controllo flusso)
  • Layer 7: protocolli applicativi (HTTP, gRPC, WebSocket, SSH, database, …)

Il layer 4 vede:

  • IP sorgente e destinazione
  • Porta sorgente e destinazione
  • Stato della connessione TCP (SYN, ACK, FIN, ecc.)

Il layer 7 vede:

  • Metodo HTTP, URL, header, corpo
  • Path e query string
  • Cookie
  • Altri metadati applicativi

Cosa vede un proxy layer 4

Un proxy layer 4 lavora “alla cieca” rispetto al contenuto applicativo:

  • Sa solo che esiste una connessione TCP tra un client e un server
  • Sa IP/porta sorgente e IP/porta destinazione
  • Può decidere dove instradare questa connessione

In questo ruolo, Nginx:

  • Non interpreta HTTP, gRPC o altri protocolli a livello applicativo
  • Non sa se un pacchetto contiene una richiesta GET o un payload binario
  • Non può fare caching basato su URL o header

È come un tubo che trasporta pacchetti TCP senza sapere cosa contengono.

Cosa vede un proxy layer 7

Un proxy layer 7 legge e interpreta il protocollo applicativo, ad esempio HTTP:

  • Conosce metodo, path, query, header, cookie
  • Può decidere il routing in base all’URL (/api, /app, /v1, /v2, …)
  • Può modificare richieste e risposte (header, body, status code)
  • Può cache le risposte per richieste ripetute

Per fare tutto questo, Nginx deve:

  • Leggere il flusso TCP
  • Eventualmente decrittare TLS
  • Parsare il protocollo (es. HTTP/1.1, HTTP/2)

Questo aggiunge un costo di CPU, ma abilita funzionalità molto più ricche.

Layer 4 e layer 7 in Nginx

In Nginx la differenza si riflette in due contesti principali:

  • stream { ... } → proxy layer 4 (tipicamente TCP)
  • http { ... } → proxy layer 7 (HTTP e affini)

Esempio semplificato di proxy TCP (layer 4) in Nginx:

stream {
upstream postgres_backend {
server db1:5432;
server db2:5432;
}
server {
listen 5432;
proxy_pass postgres_backend;
}
}

In questo caso:

  • Nginx non “capisce” il protocollo PostgreSQL
  • Non può riscrivere query o fare caching a livello SQL
  • Si limita a inoltrare i flussi TCP verso i backend definiti

Esempio semplificato di proxy HTTP (layer 7):

http {
upstream api_v1 {
server api-v1:3000;
}
upstream api_v2 {
server api-v2:3000;
}
server {
listen 80;
server_name api.miosito.it;
location /v1/ {
proxy_pass http://api_v1;
}
location /v2/ {
proxy_pass http://api_v2;
}
}
}

Qui Nginx:

  • Capisce che una richiesta va su /v1 o /v2
  • Può loggare metodo, path, status code
  • Può applicare regole diverse in base a path, header, cookie, ecc.

Vantaggi e limiti del proxy layer 4

Vantaggi:

  • Non è necessario comprendere il protocollo applicativo
  • Può gestire protocolli custom o non supportati nativamente
  • Non è obbligatorio decrittare TLS (nel caso di passthrough)
  • Implementazione più semplice e overhead minore sul parsing

Limiti:

  • Nessuna visibilità su URL, header, corpo
  • Impossibile fare caching basato sul contenuto
  • Routing molto limitato (in pratica solo in base a IP/porta)
  • Non si possono condividere in modo intelligente connessioni backend HTTP

Vantaggi e limiti del proxy layer 7

Vantaggi:

  • Visibilità completa sul protocollo applicativo (es. HTTP)
  • Routing avanzato per path, host, header, cookie, query string
  • Caching di risposte idempotenti
  • Riscrittura di header e URL
  • Possibilità di terminare TLS e riusare connessioni backend

Limiti:

  • È spesso necessario terminare TLS per leggere il contenuto
  • Overhead di CPU per parsing del protocollo e crittografia
  • Maggiore complessità di configurazione

Quando scegliere layer 4 o layer 7

Alcune linee guida pratiche:

  • Se il protocollo è HTTP/HTTPS e servono routing, caching, riscritture → layer 7
  • Se il protocollo è un database (PostgreSQL, MySQL, ecc.) → tipicamente layer 4
  • Se si vuole massima riservatezza end-to-end e Nginx non deve vedere il contenuto → proxy layer 4 con TLS passthrough
  • Se Nginx deve fare da API gateway, proteggere e trasformare richieste → necessario layer 7

La distinzione tra proxy layer 4 e layer 7 in Nginx non è solo teorica:

  • A layer 4 Nginx è un “tubo intelligente” per connessioni TCP
  • A layer 7 Nginx è un vero e proprio reverse proxy applicativo

Nei post successivi si vedrà come questa scelta si combina con le strategie di cifratura: TLS termination e TLS passthrough.

Continua la lettura

Leggi il prossimo capitolo: "TLS termination vs TLS passthrough in Nginx"

Continua a leggere