# Reverse proxy

Nelle reti informatiche un reverse proxy è un tipo di proxy che recupera i contenuti per conto di un client da uno o più server. Questi contenuti sono poi trasferiti al client come se provenissero dallo stesso proxy, che quindi appare al client come un server.
Mentre un proxy di inoltro agisce come intermediario permettendo ai suoi client di contattare qualsiasi server, un reverse proxy agisce come intermediario per i server ad esso associati per essere contattati da qualsiasi client. Molto spesso, i web server più comuni inglobano le funzionalità di un reverse proxy al fine di proteggere i framework applicativi contro le debolezze introdotte dal livello HTTP.
Un utilizzo tipico di un reverse proxy è quello di rendere accessibile ai client su Internet un server che si trova dietro un firewall. Il Reverse proxy può essere utilizzato anche per bilanciare il carico tra più server di back-end o per decifrare le connessioni per i server di back-end. Inoltre, il reverse proxy può essere utilizzato semplicemente per mappare più server alla stessa URI.

## Il reverse proxy come modulo di un firewall

Uno degli usi più frequenti del reverse proxy è quello esercitato all'interno di firewall. Al più semplice livello il reverse proxy può operare come un port forwarding, inoltrando sulla rete interna le richieste che provengono dall'esterno. Agendo però come livello di applicazione il reverse proxy può operare a livello del protocollo di comunicazione utilizzato. Un firewall con reverse proxy può lavorare in questo modo:
* Controllo sulla sintassi del protocollo per filtrare attacchi o richieste non volute.
* Inoltro del traffico a più server diversi in base all'intestazione della chiamata.
* Scansione del protocollo con funzioni ad esempio di antivirus.
* Cifratura del protocollo. Per esempio la connessione fra il client e il firewall potrebbe essere HTTPS mentre fra firewall e server potrebbe essere HTTP, cosa che sgraverebbe il server dalla cifratura HTTPS.
* Load balancing, suddividendo le richieste verso più server.

## Il reverse proxy come modulo software

Esiste però anche un ampio ambito di utilizzo al di fuori dei firewall. Molti proxy server, come ad esempio Squid, possono essere utilizzati come reverse proxy. Lo scopo è sempre quello di mascherare alla rete esterna uno o più server della rete interna, magari aggiungendovi delle funzionalità e/o migliorandone le prestazioni, ad esempio implementando una cache locale del traffico dati.

## Reverse proxy per la sicurezza informatica

Dato che tutte le richieste verso un server passano precedentemente per il reverse proxy, è possibile implementare logiche di verifica sul contenuto dell'informazione. Analizzando la richiesta HTTP si riesce ad effettuare un'operazione di filtraggio prima che del contenuto dannoso nascosto nel corpo raggiunga il server. L'intercettazione degli attacchi quindi viene effettuata a livello applicativo. Un esempio di questa configurazione è rappresentato dal software McAfee Web Gateway.
Inoltre è possibile bloccare le connessioni provenienti da un determinato client IP che sta tentando di sovraccaricare di richieste un server bersaglio di un attacco.

## Principali utilizzi

I principali utilizzi del reverse proxy sono:
* Oscuramento ai client delle caratteristiche di uno o più server collocati nella rete locale. In questo modo è possibile nascondere la logica con le quali le pagine vengono effettivamente servite. Ad esempio avendo a disposizione una batteria di server dietro il reverse proxy, al ricevere di una richiesta si può gestirla utilizzando il server più scarico in quel determinato momento.
* Riscrittura del URL. Nel caso la logica di back-end venga cambiata, è possibile effettuare la modifica del URL per reindirizzare le richieste ad altri server.
* Cifratura HTTPS. Il vantaggio a far fare la cifratura al proxy server è che così si scarica il server applicativo da questo compito. Inoltre il proxy può tenere una cache dei contenuti HTTP, cosa che non potrebbe fare in HTTPS, sgravando così da ulteriore lavoro il server applicativo. Il proxy, in questo caso, potrebbe essere dotato di un acceleratore hardware per le cifratura.
* Bilanciamento del traffico su più server. Un reverse proxy può distribuire il carico derivante dalla richieste in entrata tra i diversi server che agiscono nelle varie aree di applicazione separate. In questo caso è possibile effettuare una riscrittura dell'indirizzo URL in modo che ogni richiesta in arrivo corrisponda a una posizione di una risorsa interna.
* Accesso a più server sfruttando un solo ip interpretando opportunamente la stringa di connessione. Infatti i reverse proxy possono agire ogni qualvolta più servizi devono essere accessibili attraverso un unico indirizzo IP pubblico. I server web possono essere in ascolto su un diverse porte in un'unica macchina con lo stesso indirizzo locale, oppure essere dislocati in macchine e IP locali alla rete differenti. Il server proxy in questo caso analizzando la richiesta riesce a consegnare le informazioni al destinatario interno alla rete LAN.
* Acceleratore applicativo, in particolar modo web, facendo cache dei contenuti sfruttando le risorse locali. Si può così moltiplicare la capacità di risposta del server di origine. Questo metodo di cashing delle informazioni funziona solamente per pagine statiche. Infatti se i contenuti provenienti da un client necessitano di elaborazione, il reverse proxy agisce da tramite verso il server remoto. Una volta eseguita l'elaborazione, il contenuto viene ritrasmesso al reverse proxy per poter successivamente gestire la richiesta al cliente finale.
* Velocizzazione della capacità di elaborare la risposta del server prima di inviarla al client (Spoon Feed). Uno dei problemi dei server che devono rispondere a molteplici richieste è quello di mantenere le connessioni aperte per tutta la durata della comunicazione. Al fine di evitare questo, il reverse proxy può ricevere la pagina dinamica generata dal server e può restituirla al client un po' per volta. In questo modo il programma che genera la pagina può rilasciare le risorse che altrimenti rimarrebbero bloccate per il trasferimento dell'informazione. Il reverse proxy installato vicino al server principale può farsi carico della gestione dell'intera transazione in tempi molto brevi, trasferendo la risposta al client con il minimo ritardo che permette la connessione tra i due nodi e la congestione della rete.