Un reverse proxy è un server che riceve le richieste dei client al posto delle applicazioni vere e proprie e le inoltra al servizio giusto. Per chi visita il sito è invisibile: il browser crede di parlare con un unico server, mentre dietro possono esserci decine di servizi diversi. È uno dei componenti più utili in qualsiasi infrastruttura, dal piccolo server domestico al centro dati.
Proxy e reverse proxy: la differenza
I due termini si confondono spesso, ma lavorano su lati opposti:
| Proxy (forward) | Reverse proxy | |
|---|---|---|
| Chi rappresenta | I client | I server |
| Dove si trova | Vicino agli utenti | Davanti ai servizi |
| Uso tipico | Filtrare o registrare la navigazione aziendale | Pubblicare applicazioni, terminare TLS |
| Chi lo configura | Chi gestisce la rete degli utenti | Chi gestisce i servizi |
Un proxy aziendale decide cosa i dipendenti possono raggiungere. Un reverse proxy decide come le richieste esterne raggiungono i servizi interni.
Le funzioni principali
Un unico punto di ingresso
Con un solo indirizzo IP pubblico e le porte 80 e 443 puoi pubblicare molti servizi, distinguendoli per nome di dominio o per percorso:
cloud.esempio.itverso l'applicazione di archiviazione file;foto.esempio.itverso la galleria;esempio.it/apiverso il servizio di backend.
Il reverse proxy legge il nome richiesto, contenuto nell'intestazione Host e, con HTTPS, nell'estensione SNI della negoziazione TLS, e smista di conseguenza.
Terminazione TLS
Il reverse proxy può gestire HTTPS per tutti i servizi: conserva i certificati, li rinnova (molti software integrano il rinnovo automatico con ACME, il protocollo usato da Let's Encrypt) e parla con le applicazioni interne in HTTP semplice o con un TLS interno. Così non devi configurare certificati su ogni singola applicazione.
Bilanciamento del carico
Se un servizio gira su più istanze, il reverse proxy distribuisce le richieste tra loro con criteri come il turno circolare (round robin), il numero minore di connessioni attive o l'affinità per indirizzo del client. Con i controlli di salute esclude automaticamente le istanze che non rispondono.
Cache, compressione e limiti
Può comprimere le risposte, conservare in cache i contenuti statici, limitare il numero di richieste per client e respingere richieste anomale prima che arrivino all'applicazione.
Software diffusi
Tra i più usati ci sono nginx, HAProxy, Apache HTTP Server con i moduli proxy, Caddy e Traefik. Caddy è apprezzato per la gestione automatica dei certificati con una configurazione minima; Traefik si integra con Docker e legge la configurazione direttamente dalle etichette dei container; HAProxy è molto usato per il bilanciamento ad alte prestazioni.
Un esempio minimo con nginx, per pubblicare un'applicazione interna sulla porta 8080:
server {
listen 443 ssl;
server_name cloud.esempio.it;
ssl_certificate /etc/ssl/cloud/fullchain.pem;
ssl_certificate_key /etc/ssl/cloud/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Le intestazioni da non dimenticare
Quando il proxy inoltra la richiesta, l'applicazione vede come mittente il proxy stesso, non il visitatore. Per non perdere l'informazione si usano intestazioni dedicate:
- X-Forwarded-For o lo standard Forwarded: l'indirizzo IP originale del client;
- X-Forwarded-Proto: se la richiesta originale era HTTP o HTTPS;
- Host: il nome di dominio richiesto.
Un punto di sicurezza importante: l'applicazione deve fidarsi di queste intestazioni solo se arrivano dal proxy. Se il servizio interno è raggiungibile anche direttamente, chiunque può inviare un X-Forwarded-For falso e fingersi un altro indirizzo, aggirando limiti di accesso basati sull'IP o falsando i log.
Buone pratiche
- Fai ascoltare le applicazioni interne solo su localhost o sulla rete interna, mai sull'interfaccia pubblica.
- Reindirizza tutto il traffico HTTP verso HTTPS.
- Imposta limiti ragionevoli su dimensione delle richieste e tempi di attesa, adattandoli ai servizi che caricano file grandi.
- Conserva i log di accesso sul proxy: è il punto da cui passa tutto e sarà la prima fonte da consultare in caso di problemi.
- Aggiorna regolarmente il software del proxy, che è esposto direttamente a Internet.
Nel lavoro di analisi di incidenti, i log del reverse proxy sono spesso l'unica traccia affidabile di cosa è arrivato ai servizi e da dove: vale la pena configurarne bene il formato e la conservazione fin dall'inizio.
In sintesi
- Il reverse proxy sta davanti ai servizi e smista le richieste per nome o percorso.
- Centralizza HTTPS e il rinnovo dei certificati, liberando le singole applicazioni.
- Può bilanciare il carico, comprimere, limitare e mettere in cache.
- Le intestazioni X-Forwarded vanno trasmesse, ma accettate solo se provengono dal proxy.
- Le applicazioni dietro il proxy non devono essere raggiungibili direttamente dall'esterno.