Qual è la differenza tra un server proxy e un server proxy inverso?


1773

Qual è la differenza tra un server proxy e un server proxy inverso?


51
È ben spiegato anche nei documenti di Apache .
Paolo,

3
@Paolo che ha reso molto più facile la comprensione dell'articolo Wikipedia. Forse dovrei andare in giro a modificare alcune di quelle informazioni nell'articolo di Wikipedia alla fine ...
RastaJedi

Diciamo che ho l'host A che deve connettersi all'host C, ma non direttamente. Invece, è configurato come con una voce host o possibilmente dns, per chiamare B che inoltra la richiesta a C. C non gli interessa o non conosce B. È un proxy inoltro o un proxy inverso?
Daniel Leach,

Se l'host A non riesce a raggiungere l'host C senza essere configurato per contattare prima l'host B, allora l'host B è un server proxy tradizionale forward o "outbound".
TaylorMonacelli,

5
I proxy forward garantiscono l'anonimato del cliente (vale a dire, pensa Tor). I proxy inversi garantiscono l'anonimato dei server back-end (vale a dire, pensa ai server dietro una DMZ).
8bitjunkie,

Risposte:


2971

Le risposte precedenti erano accurate, ma forse troppo concise. Proverò ad aggiungere alcuni esempi.

Prima di tutto, la parola "proxy" descrive qualcuno o qualcosa che agisce per conto di qualcun altro.

Nel regno dei computer, stiamo parlando di un server che agisce per conto di un altro computer.

Ai fini dell'accessibilità, limiterò la mia discussione ai proxy Web, tuttavia l'idea di un proxy non si limita ai siti Web.

Proxy FORWARD

La maggior parte delle discussioni sui proxy web si riferisce al tipo di proxy noto come "forward proxy".

L'evento proxy, in questo caso, è che il "proxy inoltro" recupera i dati da un altro sito Web per conto del richiedente originale.

Una storia di 3 computer (parte I)

Per un esempio, elencherò tre computer collegati a Internet.

  • X = il tuo computer o computer "client" su Internet
  • Y = il sito Web proxy, proxy.example.org
  • Z = il sito Web che si desidera visitare, www.example.net

Normalmente, ci si connette direttamente da X --> Z.

Tuttavia, in alcuni scenari, è meglio per Y --> Zconto di X, che catene come segue: X --> Y --> Z.

Ragioni per cui X vorrebbe usare un server proxy forward:

Ecco un elenco (molto) parziale di usi di un server proxy forward:

  • 1) X non è in grado di accedere direttamente a Z perché

    • a) Qualcuno con autorità amministrativa sulla Xconnessione Internet ha deciso di bloccare tutti gli accessi al sito Z.

      • Esempi:

        • Il virus Storm Worm si sta diffondendo inducendo le persone a visitare familypostcards2008.com, quindi l'amministratore di sistema ha bloccato l'accesso al sito per impedire agli utenti di infettarsi inavvertitamente.

        • I dipendenti di una grande azienda hanno perso troppo tempo facebook.com, quindi la direzione vuole che l'accesso sia bloccato durante l'orario di lavoro.

        • Una scuola elementare locale non consente l'accesso a Internet al playboy.comsito Web.

        • Un governo non è in grado di controllare la pubblicazione di notizie, quindi controlla l'accesso alle notizie, bloccando siti come wikipedia.org. Vedi TOR o FreeNet .

    • b) L'amministratore di Zha bloccato X.

      • Esempi:

        • L'amministratore di Z ha notato tentativi di hacking provenienti da X, quindi l'amministratore ha deciso di bloccare l'indirizzo IP di X (e / o netrange).

        • Z è un sito Web del forum. Xsta inviando spam al forum. Z blocca X.

Proxy inverso

Una storia di 3 computer (parte II)

Per questo esempio, elencherò tre computer collegati a Internet.

  • X = il tuo computer o computer "client" su Internet
  • Y = il sito Web del proxy inverso, proxy.example.com
  • Z = il sito Web che si desidera visitare, www.example.net

Normalmente, ci si connette direttamente da X --> Z.

Tuttavia, in alcuni scenari, è meglio per l'amministratore Zlimitare o vietare l'accesso diretto e forzare i visitatori a passare prima attraverso Y. Quindi, come prima, abbiamo dati che vengono recuperati dal Y --> Zconto di X, che catene come segue: X --> Y --> Z.

Ciò che è diverso questa volta rispetto a un "proxy inoltro", è che questa volta l'utente Xnon sa che sta accedendo Z, perché l'utente Xvede solo che sta comunicando Y. Il server Zè invisibile ai client e solo il proxy inverso Yè visibile esternamente. Un proxy inverso non richiede alcuna configurazione (proxy) sul lato client.

Il cliente Xpensa di comunicare solo con Y( X --> Y), ma la realtà è che Yinoltra tutte le comunicazioni (di X --> Y --> Znuovo).

Ragioni per cui Z vorrebbe configurare un server proxy inverso:

  • 1) Z vuole forzare prima tutto il traffico verso il suo sito web per passare attraverso Y.
    • a) Z ha un grande sito Web che milioni di persone vogliono vedere, ma un singolo server Web non può gestire tutto il traffico. Quindi Z imposta molti server e mette un proxy inverso su Internet che invierà gli utenti al server più vicino a loro quando tentano di visitare Z. Questo fa parte del modo in cui funziona il concetto di Content Distribution Network (CDN).
  • 2) L'amministratore di Z è preoccupato per ritorsioni per il contenuto ospitato sul server e non vuole esporre il server principale direttamente al pubblico.
    • a) I proprietari di marchi di spam come "Canadian Pharmacy" sembrano avere migliaia di server, mentre in realtà hanno la maggior parte dei siti Web ospitati su molti meno server. Inoltre, i reclami per abuso dello spam disattiveranno solo i server pubblici, non il server principale.

Negli scenari sopra, Zha la possibilità di scegliere Y.

Collegamenti ad argomenti dal post:

Rete di distribuzione dei contenuti

Software proxy forward (lato server)

Software proxy inverso per HTTP (lato server)

Software proxy inverso per TCP (lato server)

Guarda anche:


1
TAM (tivoli access manager) è anche un server proxy inverso, giusto?
Clark Bao,

2
Concettualmente quindi, potremmo riferirci o pensare a un "proxy inverso" e quindi a un proxy "forzato"?
Thomas

3
"che invierà gli utenti al server più vicino a loro" - Qual è il punto? Tutto il traffico passerà attraverso quel server proxy, giusto? Quindi non importa dove si trovi la posizione del server "locale" dietro di esso. O mi manca qualcosa?
Pavel,

2
@Pavel probabilmente "il server più vicino a loro" non è la descrizione migliore. Più come "distribuire il carico al pool di server" è una descrizione migliore. Questo esempio descriveva un bilanciamento del carico proxy inverso.
JDS,

6
Questa è stata la chiave per me: - avanti: (X --> Y) --> Z, inverso: X --> (Y --> Z).
Druckles,

538

Una coppia di definizioni semplici sarebbe:

Proxy diretto: agire per conto di un richiedente (o consumatore del servizio)

Proxy inverso: agire per conto del produttore di servizi / contenuti.


414

Ho trovato il diagramma di seguito molto utile. Mostra solo l'architettura di un'impostazione del proxy in avanti o inversa dal client al server su Internet. Questa immagine ti aiuterà a capire meglio la risposta di qyb2zm302 e altre risposte.

Proxy diretto vs Proxy inverso

È inoltre possibile guardare il video da F5 s' DevCentral da Peter Silva.

Fonte immagine: Quora . Tuttavia, secondo Martijn Pieters , questa immagine potrebbe essere tratta dal sito Pulse Secure Community o dal sito di Julien Pauli (in francese) su developpez.com.

Mi ha ricordato il classico proverbio:

Un'immagine vale più di 1000 parole.


9
Questo è davvero tutto ciò che devi guardare. Configurare un proxy nel tuo browser in modo che Netflix non sappia in quale paese ti trovi è un proxy in avanti; un servizio upstream che indirizza una richiesta in arrivo (forse si desidera inviare una richiesta a due server) è un proxy inverso.
Kyle Chadha,

5
Il proxy di inoltro può essere anche su Internet
mac

7
L'immagine migliore nell'ultima risposta. Grazie. :) Un proxy inverso è anche noto come "Load Balancer" e agisce sul lato server (distribuisce il carico su server diversi), mentre un proxy forward supporta il lato client.
codepleb,

1
L'autore di quora non è l'autore originale dell'immagine, poiché questa pagina del 2013 con una singola revisione è più vecchia di un anno.
Martijn Pieters

1
È possibile che questo tutorial francese del 2009 sia la fonte; la copia dell'archivio web del 2009 presenta problemi di javascript (reindirizzamenti continui) e le immagini sono state archiviate solo nel 2017, ma la fonte fa riferimento agli stessi URL delle immagini delle fonti successive.
Martijn Pieters

230

Forward Proxy vs. Reverse Proxy (2012) spiega chiaramente la differenza tra i proxy forward e reverse.

la risposta di qyb2zm302 dettagliatamente le applicazioni dei proxy, ma scivola sul concetto fondamentale tra proxy forward e reverse. Per il proxy inverso, X → Y → Z, X conosce Y e non Z, piuttosto che viceversa.

Un proxy è semplicemente un intermediario per la comunicazione (richieste + risposte). Client <-> Proxy <-> Server

  • Proxy client: ( client <-> proxy ) <-> server

Il proxy agisce per conto del client. Il cliente conosce tutte e tre le macchine coinvolte nella catena. Il server no.

  • Proxy server: client <-> ( proxy <-> server )

Il proxy agisce per conto del server. Il client conosce solo il proxy. Il server conosce l'intera catena.

Mi sembra che avanti e indietro siano semplicemente nomi confusi e dipendenti dalla prospettiva per client e server proxy . Suggerisco di abbandonare il primo per il secondo, per una comunicazione esplicita.

Naturalmente, per complicare ulteriormente la questione, non tutte le macchine sono esclusivamente client o server. Se c'è un'ambiguità nel contesto, è meglio specificare esplicitamente dove si trova il proxy e le comunicazioni che tunnel.


3
Questa risposta è in linea con httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse e aiuta a spiegarla chiaramente
Greg Woods

7
sembra che la caratteristica più rilevante in questo confronto sia chi sa chi. proxy in avanti: il client conosce sia il proxy (lo ha configurato in effetti) sia il server di destinazione (come fa richiesta all'URL del server), mentre, nel caso del proxy inverso, il client conosce il proxy come server di destinazione (esso non sa cosa stia effettivamente chiamando il proxy; può essere un server o più). con un proxy forward, il server non sa chi siano realmente i client, come il proxy "inoltra" ad esso richiesto. proxy forward: nascondi client. proxy inverso: nascondi server.
Belun,

@Protongun "..Un proxy è semplicemente un intermediario per la comunicazione (richieste + risposte) .." qual è la necessità del proxy in primo luogo? Si prega di precisare. IMHO questa risposta avrebbe dovuto essere quella accettata
vikramvi il

Il primo link in questo post lo rende chiaro e facile da capire per tutti
Legends,

@Belun Ben spiegato con parole / termini estremamente semplici.
Ilangeeran,

129

Alcuni diagrammi potrebbero aiutare:

Proxy diretto

Proxy diretto

Proxy inverso

Proxy inverso


8
È? Sembrano uguali! Cosa c'è di così speciale nel riscrivere una risposta che rende un proxy un proxy "inverso"?
8bitjunkie,

2
@ 8bitjunkie Riguarda la prospettiva. Si noti che, per il proxy forward, il client sa che sta comunicando con un server proxy. Per il proxy inverso, il client pensa che stia comunicando direttamente con home.com. I proxy hanno anche implementazioni diverse. Il proxy inverso può essere piuttosto stupido. Tutto quello che deve fare è cambiare l'indirizzo e passare la chiamata. Più logica di rete sul client, meno sul proxy. Il proxy di inoltro, d'altra parte, deve in qualche modo sapere che una richiesta per proxy.com () richiede una chiamata a service.com. Meno logica di rete sul client, più sul proxy.
Kevin,

1
Cosa si intende per " tradurre myhome.myhosting.com in hom.com" Non ricevo la parte di traduzione. Come riscrivere parte dell'intestazione della risposta o qualcosa del genere?
1252748

Inoltre, uno dei motivi del proxy inverso (basato su ciò che ho capito dalla risposta accettata) è che lo scopo di ciò è quello di dividere il traffico in entrata pesante tra più server. Dove in questa catena succede? È un'altra "regola in entrata"?
1252748

@ 1252748 circa 1), la traduzione significherebbe semplicemente mappare gli URL e inviare una richiesta all'URL appropriato. circa 2), sì, è possibile configurare il server per, ad esempio, utilizzare round robin per bilanciare il carico delle richieste tra i server.
Maria Ines Parnisari,

72

La differenza sta principalmente nella distribuzione. I proxy Web forward e reverse hanno tutti le stesse funzionalità di base. Accettano richieste di richieste HTTP in vari formati e forniscono una risposta, in genere accedendo al server di origine o di contatto.

I server con funzionalità complete di solito dispongono di controllo degli accessi, memorizzazione nella cache e alcune funzionalità di mappatura dei collegamenti.

Un proxy forward è un proxy a cui si accede configurando il computer client. Il client necessita del supporto del protocollo per le funzionalità proxy (reindirizzamento, autenticazione proxy, ecc.). Il proxy è trasparente per l'esperienza dell'utente, ma non per l'applicazione.

Un proxy inverso è un proxy che viene distribuito come server Web e si comporta come un server Web, con l'eccezione che invece di comporre localmente il contenuto da programmi e disco, inoltra la richiesta a un server di origine. Dal punto di vista del client è un server Web, quindi l'esperienza dell'utente è completamente trasparente.

In effetti, una singola istanza proxy può essere eseguita contemporaneamente come proxy forward e reverse per popolazioni client diverse.


Giusto per essere sicuri, un proxy in avanti è lato client e un proxy inverso è lato server?
Yves,

4
@yves. un proxy è anche un server. È solo che il client ha bisogno di una configurazione locale per poter comunicare. Mentre un proxy inverso richiede la configurazione sul server stesso. I loro nodi fisici sono entrambi sul "lato server".
Adib Aroui,

Solo per informazioni generali, non tutti i proxy possono funzionare come forward e reverse, ad es. SOCKS può, ma non i proxy HTTP.
RastaJedi,

60

Proxy: sta effettuando la richiesta per conto del client . Pertanto, il server restituirà la risposta al proxy e il proxy inoltrerà la risposta al client. In effetti, il server non "apprenderà" mai chi era il client (l'indirizzo IP del client); conoscerà solo il proxy. Tuttavia, il client conosce sicuramente il server, dal momento che formatta essenzialmente la richiesta HTTP destinata al server, ma lo passa semplicemente al proxy.

Inserisci qui la descrizione dell'immagine

Proxy inverso: sta ricevendo la richiesta per conto del server . Inoltra la richiesta al server, riceve la risposta e quindi restituisce la risposta al client. In questo caso, il client non "imparerà" mai chi era il server effettivo (l'indirizzo IP del server) (con alcune eccezioni); conoscerà solo il proxy. Il server saprà o non conoscerà il client effettivo, a seconda delle configurazioni del proxy inverso.

Inserisci qui la descrizione dell'immagine


6
Sento che potrei copiare e incollare le tue definizioni all'indietro e che sarebbero ancora vere. Non credo che ciò spieghi alcuna differenza chiave o chiarisca cosa c'è di così "inverso" in un proxy inverso?
8bitjunkie,

6
Il proxy agirà sempre per conto di qualcuno (nascondendo la sua identità all'altra parte). Il "contrario" si riferisce al rovesciamento del lato "nascosto", con client sul primo caso (proxy normale) e server sul secondo caso (proxy inverso). In effetti, i termini potrebbero essere usati in modo intercambiabile, è solo una questione di convenzione che ha selezionato il primo caso come proxy regolare (probabilmente per motivi storici). Spero che abbia senso.
Dimos,

44

La migliore spiegazione è qui con i diagrammi:

Mentre un proxy inoltro esegue il proxy per conto dei client ( o richiede host ) , un proxy inverso esegue il proxy per conto dei server.

In effetti, mentre un proxy forward nasconde le identità dei client, un proxy inverso nasconde le identità dei server.


38

Un server proxy inoltra (e facoltativamente memorizza nella cache) richieste di rete in uscita verso varie risorse pubbliche non necessariamente correlate su Internet. Un proxy inverso acquisisce (e facoltativamente memorizza nella cache) le richieste in arrivo da Internet e le distribuisce a varie risorse private interne, di solito per scopi di alta disponibilità.



28

Proxy (Forward Proxy):

Quando i computer della LAN si connettono a un server proxy che accede a Internet. I vantaggi includono solo il server esposto a Internet. Le persone esterne non sono in grado di accedere direttamente ai computer. I proxy forward possono migliorare l'accesso a Internet per gli utenti memorizzando nella cache i download. Possono anche essere utilizzati per limitare l'accesso a determinati siti. Inoltre, solo il server proxy avrebbe bisogno di un indirizzo pubblico, non dei client che si connettono ad esso.

Proxy inverso:

Un proxy inverso è l'opposto di un proxy forward. Invece funge da proxy per conto dei server a cui è collegato. Invece di accedere direttamente a un server remoto, un utente passerebbe attraverso il proxy inverso e da lì verrebbe indirizzato al server appropriato. Solo il proxy inverso avrebbe bisogno di un certificato SSL, sarebbe necessario un solo indirizzo IP pubblico e può gestire il bilanciamento del carico delle richieste in arrivo per migliorare l'esperienza utente complessiva.

Inserisci qui la descrizione dell'immagine

Origine immagine: creazione di un proxy diretto mediante il routing delle richieste dell'applicazione


3
IMHO, la risposta più semplice / migliore.
Vinicius Gonçalves,

12

La mia comprensione dal punto di vista di Apache è che il proxy significa che se il sito x proxy per il sito y, quindi le richieste per x restituiscono y.

Il proxy inverso indica che la risposta di y viene regolata in modo tale che tutti i riferimenti a y diventino x.

In modo che l'utente non possa dire che è coinvolto un proxy ...


10

Secondo la mia comprensione ...

Per cominciare, come tutti sanno, proxy significa "l'autorità di rappresentare qualcun altro". Ora ci sono due cose, forward e reverse proxy.

Proxy diretto

Supponiamo che tu voglia accedere a "Google" e "Google" a loro volta avranno n numero di server per rispondere a quella particolare richiesta.

Ora in questo caso, mentre richiedi qualcosa a Google e non vuoi che Google veda il tuo indirizzo IP, utilizzerai un proxy di inoltro, come spiegato di seguito.

A → B → C

Ora eccoti A, che invia una richiesta tramite B. Quindi C penserà che la richiesta provenga da B, non da A. In questo modo puoi impedire che l'indirizzo IP dei tuoi clienti non sia esposto al mondo esterno.

Proxy inverso

Ora in questo caso, per farti capire, prenderemo lo stesso caso di proxy forward. Qui hai richiesto qualcosa a Google, che a sua volta ha intenzione di inviare una richiesta all'app server o un altro server proxy per ottenere la risposta. Quindi queste cose accadranno come spiegato di seguito.

A → B → C

C → D

C ← D

A ← B ← C

Dal diagramma sopra puoi vedere che una richiesta è stata inviata a C da B, non da A. Quindi da C ci sarà una richiesta inviata a D. Allo stesso modo la risposta andrà a C da D e poi a B e A.

Il diagramma sopra dice che è solo il contesto che conta, sebbene entrambi i proxy agiscano allo stesso modo, ma il proxy sul lato client nasconde le informazioni sul client mentre il proxy sul lato server nasconderà le informazioni sul lato server.



9

Ecco un esempio di proxy inverso (come bilanciamento del carico).

Un client naviga su website.com e il server colpito ha un proxy inverso in esecuzione su di esso. Il proxy inverso sembra essere Pound . Pound accetta la richiesta e la invia a uno dei tre server applicazioni dietro di essa. In questo esempio, Pound è un bilanciamento del carico. Cioè, sta bilanciando il carico tra tre server applicazioni.

I server delle applicazioni forniscono il contenuto del sito Web al client.


8

Un proxy forward serve agli utenti : aiuta gli utenti ad accedere al server .

Un proxy inverso serve il server : protegge il server dagli utenti .


4

Se nessun proxy

Per vedere dal lato client e lato server sono gli stessi:

Client -> Server

delega

Dal lato client:

Client -> proxy -> Server

Dal lato server:

Client -> Server

Proxy inverso

Dal lato client:

Client -> Server

Dal lato server:

Client -> proxy -> Server

Quindi penso che se impostato da un utente client , si chiama proxy ; se impostato da un server manager è un proxy inverso.

Poiché gli scopi e le ragioni per configurarlo sono diversi, gestiscono i dati in modi diversi e utilizzano software diversi.

   User side          |      Server side
client  <->  proxy  <-->  reverse_proxy <-> real server

Sarebbe meglio se la sua rappresentazione grafica ma un bel contenuto. @ Tinyhare
Narendra

3

Guardando dal punto di vista dell'utente: quando si invia una richiesta a un proxy o a un server proxy inverso :

  • proxy - richiede due argomenti :

    1) cosa ottenere e 2) quale server proxy utilizzare un intermedio

  • proxy inverso - richiede un argomento :

    1) cosa ottenere

Un proxy inverso recupera i contenuti da un altro server all'insaputa dell'utente e restituisce il risultato come se fosse originato dal server proxy inverso .


1

La maggior parte delle risposte precedenti sono buone, ma secondo me nessuna è molto vicina ad affrontare abbastanza bene la qualità "inversa" che differenzia le due. Per fare ciò, è necessario fornire un modo per visualizzare la natura "inversa" di ciò che è essenzialmente la stessa cosa (un proxy) e deve essere data in modo ben astratto.

Un proxy (implicitamente "forward proxy") collega più client locali a un singolo server remoto:

c--
   |--p--s
c--

Un proxy inverso collega più server locali a qualsiasi client remoto (notare come si inverte il layout):

s--
   |--p--c
s--

È una questione di prospettiva comprendere veramente e correttamente il concetto richiede di sottrarre dettagli non essenziali (al particolare concetto) sebbene possano essere molto importanti quando si tratta della pragmatica dell'operazione di procura. Tali dettagli includono il fatto che in entrambi gli scenari la realtà è che più client si connettono a più server, che client e server potrebbero non essere realmente locali o remoti, dove si trova il cloud Internet o che tipo di visibilità esiste tra client e server.


"più server locali per un singolo client remoto" - hm, perché non più server per più client? Voglio dire - il server stesso non si connette comunque ai client, risponde solo alle richieste dei client, indipendentemente dal fatto che si tratti di più client o dello stesso client singolo.
JustAMartin,

Leggi di nuovo - in particolare l'ultimo paragrafo e cerca di capire "qualsiasi client remoto" come uno dei tanti casi di intervento
Fotios Basagiannis

Il testo è ok, è solo che il secondo diagramma mi ha fatto pensare all'improvviso "ehi, dove è andato l'altro cliente?" quando l'ho confrontato con il primo diagramma.
JustAMartin,

Sì, è perché quel client non è uno degli altri due. Gli sviluppatori tendono a pensare in termini molto concreti e specifici perché questo è ciò che aiuta quando si implementano le cose, tuttavia che lo stesso modo di pensare non è molto utile quando si pensa alle astrazioni.
Fotios Basagiannis,
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.