A cosa serve la direttiva ProxyPassReverse


8

La definizione da apache.org dice:

Questa direttiva consente ad Apache httpd di regolare l'URL nelle intestazioni Location, Content-Location e URI sulle risposte di reindirizzamento HTTP. Questo è essenziale quando Apache httpd viene utilizzato come proxy inverso (o gateway) per evitare di bypassare il proxy inverso a causa dei reindirizzamenti HTTP sui server back-end che rimangono dietro il proxy inverso.

Verranno riscritte solo le intestazioni di risposta HTTP specificate sopra. Apache httpd non riscriverà le altre intestazioni di risposta, né riscriverà automaticamente i riferimenti URL all'interno delle pagine HTML. Ciò significa che se il contenuto in proxy contiene riferimenti URL assoluti, ignoreranno il proxy. Per riscrivere il contenuto HTML in modo che corrisponda al proxy, è necessario caricare e abilitare mod_proxy_html.

percorso è il nome di un percorso virtuale locale; url è un URL parziale per il server remoto. Questi parametri sono usati allo stesso modo della direttiva ProxyPass.

Qualcuno può spiegarmi come funziona. In generale, cosa fa questa direttiva?

Risposte:


8

Se il server che gestisce effettivamente una richiesta effettua un reindirizzamento a un URL diverso su quel server, la ProxyPassReversedirettiva riscrive l'URL in termini di server proxy inverso. Ad esempio, come indicato nella documentazione di Apache , se:

 http://reverseproxy.com/mirror/foo/bar

viene inviato (proxy inverso) a

 http://backend.example.com/bar

per la gestione, ma sul server back-end viene determinato che avrebbe dovuto essere l'URL corretto quux, ovvero che la richiesta deve essere reindirizzata a

 http://backend.example.com/quux

la ProxyPassReversedirettiva riscrive l'URL (nel proxy inverso) in

 http://reverseproxy.com/mirror/foo/quux

prima di inoltrare la risposta di reindirizzamento HTTP al client. In questo modo il client conosce solo il server proxy inverso, ma può comunque inoltrare la richiesta richiesta all'URL corretto, http://reverseproxy.com/mirror/foo/quuxche verrà quindi inoltrato al server back-end e gestito normalmente. In breve, consente solo al proxy inverso di restituire le intestazioni URI corrette sulle risposte di reindirizzamento HTTP.


Non è chiaro cosa does a redirectsignifichi effettivamente. Risponde con una risposta di reindirizzamento HTTP (301/302)?
Chris Stryczynski,

Risponderà con un codice 3xx, in quanto "[t] he 3xx (Reindirizzamento) classe di codice di stato indica che l'agente utente deve intraprendere ulteriori azioni per soddisfare la richiesta." Vedere RFC 7231 per informazioni sul reindirizzamento . La ProxyPassReversedirettiva garantisce semplicemente che la risposta HTTP 3xx includa l'URI corretto in termini di server proxy inverso.
Colt

0

Dalla guida del proxy inverso di Apache 2.4 :

Per garantire che e Posizione: le intestazioni generate dal back-end vengono modificate in modo da puntare al proxy inverso, anziché tornare a se stesso, la direttiva ProxyPassReverse è spesso richiesta:

ProxyPass "/" " http://www.example.com/ "

ProxyPassReverse "/" " http://www.example.com/ "

Se si dispone di un client e 2 server, proxy e Origin, in cui Origin esegue il lavoro effettivo (generando la risposta) e il proxy richiede solo i proxy a Origin, una buona architettura del server è quando

  1. Origin non è a conoscenza del proxy
  2. e ogni richiesta passa attraverso il proxy.

Se Origin non è a conoscenza del proxy, potrebbe accadere che Origin restituisca al client un reindirizzamento HTTP (HTTP 301 o 302) tramite proxy, che punta direttamente a se stesso, Origin. E questo è un problema perché il browser contatterà direttamente Origin nel prossimo round, il che violerebbe il punto 2.

Quando le risposte di reindirizzamento HTTP tornano al proxy verso il client, il proxy può / dovrebbe modificare tali reindirizzamenti in modo che la posizione rimanga puntata su proxy. In questo modo un'applicazione autonoma in esecuzione su Origin ignaro del proxy può generare qualsiasi URL di reindirizzamento purché il proxy sia ben configurato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.