coldwa.st
Tutte le guideProgrammazioneWebDatiStrumentiDatabaseHaskellConcettiCabal e buildToolchainCompilatorePrestazioniEditor e HLS

Programmazione · Server · Reti

Cos'è un reverse proxy?

Di ColdwastAggiornato il 26 giu 20268 min di lettura#reverse-proxy#servers#networking
Cavi Ethernet collegati a un pannello di switch di rete in un data center
Un reverse proxy è la porta d'ingresso unica ai tuoi server: ogni richiesta arriva nello stesso punto, che poi la inoltra al backend giusto dietro le quinte.

Appena esegui più di un'applicazione su un server — un sito, un'API, magari qualche container — ti scontri con un problema pratico: i visitatori arrivano tutti sulle porte 80 e 443, ma ogni applicazione ascolta altrove. Un reverse proxy è la risposta standard. Questa guida spiega cos'è un reverse proxy, in cosa differisce dal proxy che forse già conosci e perché quasi ogni ambiente di produzione ne ha uno.

La definizione breve

Un reverse proxy è un server che si trova davanti a uno o più server backend, riceve ogni richiesta in entrata del client e la inoltra al backend appropriato, per poi restituire la risposta di quel backend al client. Per il visitatore, il reverse proxy è il sito: parla solo con lui e non vede mai i server dietro. La parola «reverse» (inverso) conta, e la sezione successiva spiega perché.

Reverse proxy vs proxy diretto

Un proxy normale (forward) si trova davanti ai client. Quando il tuo browser è configurato per usarne uno, le tue richieste escono attraverso il proxy a tuo nome: agisce per chi fa le richieste. Un reverse proxy è l'immagine speculare: si trova davanti ai server e agisce per loro conto. I client si collegano a lui credendo che sia il server reale, ed è lui a decidere quale backend gestisce davvero ogni richiesta. Stessa idea di intermediario, lato opposto della conversazione.

Server in un rack di data center illuminati da spie blu e rosse
Dietro un solo reverse proxy possono esserci molti server backend come questi. Il proxy è l'unica macchina con cui parla il pubblico; instrada ogni richiesta al backend che deve gestirla.

A cosa serve davvero un reverse proxy

  • Routing per hostname o percorso: inviare api.example.com alla tua API e example.com al tuo sito, anche se entrambi girano sulla stessa macchina.
  • Terminazione TLS: gestire i certificati HTTPS in un solo posto, così ogni backend parla HTTP semplice internamente e tu gestisci i certificati una volta sola.
  • Cache: memorizzare e servire direttamente le risposte frequenti, per non sollecitare il backend a ogni richiesta.
  • Buffer e protezione: assorbire i client lenti, applicare limiti e nascondere gli indirizzi reali dei backend dietro un unico punto d'ingresso pubblico.

In pratica routing e TLS bastano già a giustificarlo: ti permettono di ospitare diverse applicazioni in modo pulito su un solo VPS, in HTTPS, dietro un unico indirizzo.

Reverse proxy vs load balancer

Questi concetti si sovrappongono, da qui la confusione. Un load balancer (bilanciatore di carico) ha un compito preciso: distribuire il traffico in entrata su più backend identici perché nessuno venga sovraccaricato. Un reverse proxy è il concetto più ampio — inoltra le richieste e può fare molte cose (routing, TLS, cache), e distribuire il carico tra i backend è una di queste. Quindi un load balancer è in sostanza un reverse proxy concentrato sul compito di bilanciamento. La maggior parte dei reverse proxy moderni sa anche bilanciare il carico, mentre un load balancer dedicato a volte non fa molto altro.

Gli strumenti comuni

I reverse proxy più usati sono Nginx, Caddy, HAProxy e Traefik. Nginx è il riferimento storico ed è estremamente veloce nel servire e fare da proxy. Caddy è apprezzato perché ottiene e rinnova i certificati HTTPS automaticamente, quasi senza configurazione. Traefik è pensato per ambienti a container e Kubernetes, dove scopre i servizi man mano che compaiono e scompaiono. HAProxy è preferito quando il bilanciamento di carico ad alto volume è la priorità. I provider cloud offrono anche reverse proxy e load balancer gestiti come servizio.

Un esempio minimo

Una configurazione di reverse proxy è soprattutto un breve elenco di regole. In Nginx, inviare le richieste di un host a un'app che gira in locale sulla porta 3000 appare così:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
    }
}

Questa è tutta l'idea: le richieste per example.com arrivano a Nginx sulla porta 80, e Nginx le inoltra alla tua app sulla porta 3000, passando l'host originale. Aggiungi un blocco TLS e un secondo server per la tua API, e una sola macchina serve in modo pulito più applicazioni via HTTPS.

I compromessi onesti

Un reverse proxy aggiunge un pezzo in movimento in più. Diventa il punto unico attraverso cui passa ogni richiesta, quindi se cade tutto ciò che sta dietro diventa irraggiungibile — ecco perché in produzione lo si esegue in modo affidabile e a volte in coppia. Aggiunge anche un po' di latenza e un altro file di configurazione da capire. Per una sola piccola app che già ascolta sulla porta 443, potresti non averne bisogno. Ma appena ospiti più di un servizio, vuoi gestire l'HTTPS in un solo posto o pensi di scalare, un reverse proxy si ripaga in fretta.

Domande frequenti

Cos'è un reverse proxy in parole semplici?

Un reverse proxy è un server che si pone davanti ai tuoi server reali. Ogni visitatore si collega a lui invece di parlare direttamente con le tue app, e lui inoltra ogni richiesta al backend giusto, poi ne restituisce la risposta. Per il visitatore sembra il sito stesso, mentre i server reali restano nascosti dietro.

Qual è la differenza tra un reverse proxy e un proxy diretto?

Un proxy diretto si pone davanti ai client e fa le richieste a loro nome: rappresenta chi naviga. Un reverse proxy si pone davanti ai server e li rappresenta: i client si collegano a lui come se fosse il server reale, e lui sceglie quale backend gestisce ogni richiesta. Stessa idea di intermediario, ma alle estremità opposte della connessione.

Un reverse proxy è la stessa cosa di un load balancer?

Non esattamente. Un load balancer distribuisce il traffico su più backend identici per condividere il carico. Un reverse proxy è il concetto più ampio che inoltra le richieste e può anche fare routing, TLS e cache, e il bilanciamento del carico è una di queste cose. Quindi un load balancer è in pratica un reverse proxy concentrato sul compito di bilanciamento.

Mi serve un reverse proxy?

Ti serve appena ospiti più di un'app su un server, vuoi gestire l'HTTPS in un solo posto o pensi di scalare su più backend. Per una sola piccola app che già serve HTTPS sulla propria porta, puoi farne a meno. Appena entrano in gioco routing, certificati o più servizi, un reverse proxy rende il tutto molto più pulito.

Guida indipendente, mantenuta dalla comunità. coldwa.st è un sito di risorse di programmazione; questo articolo è un testo esplicativo originale e inedito sui reverse proxy. Lo snippet Nginx è una configurazione standard mostrata a titolo illustrativo; consulta la documentazione del tuo proxy e della sua versione per i dettagli.
Consigliato

Un server su cui far girare il tuo reverse proxy

Far girare Nginx o Caddy come reverse proxy davanti alle tue app richiede un vero server Linux con controllo totale — un VPS o un server cloud su cui possiedi le porte 80 e 443. Infomaniak — provider svizzero rispettoso della privacy — offre VPS e server cloud su cui puoi installare un reverse proxy e instradare il traffico verso tutti i backend che vuoi.

Scopri Infomaniak Cloud →

Link di affiliazione — sostiene queste guide gratuite.

Sfoglia altre spiegazioni chiare nel nostro indice delle guide.