¿Cuál es la diferencia entre un servidor proxy y un servidor proxy inverso?

1773

¿Cuál es la diferencia entre un servidor proxy y un servidor proxy inverso?

Peter Mortensen
fuente
51
También está bien explicado en los documentos de Apache .
Paolo
3
@Paolo que lo hizo mucho más fácil de entender que el artículo de Wikipedia. Tal vez debería comenzar a editar parte de esa información en el artículo de Wikipedia eventualmente ...
RastaJedi
Digamos que tengo el host A que necesita conectarse al host C, pero no lo hace directamente. En cambio, está configurado como un con entrada de host o posiblemente dns, para llamar a B que reenvía la solicitud a C. C no le importa o no sabe acerca de B. ¿Es esto un proxy de reenvío o un proxy inverso?
Daniel Leach
Si el host A no puede llegar al host C sin estar configurado para contactar primero con el host B, entonces el host B es un servidor proxy tradicional hacia adelante o "saliente".
TaylorMonacelli
55
Los proxies avanzados otorgan al cliente el anonimato (es decir, piense en Tor). Los servidores proxy inversos otorgan anonimato a los servidores de fondo (es decir, piensan en servidores detrás de una DMZ).
8bitjunkie

Respuestas:

2972

Las respuestas anteriores fueron precisas, pero tal vez demasiado breves. Intentaré agregar algunos ejemplos.

En primer lugar, la palabra "poder" describe a alguien o algo que actúa en nombre de otra persona.

En el ámbito informático, estamos hablando de un servidor que actúa en nombre de otra computadora.

Para fines de accesibilidad, limitaré mi discusión a los servidores proxy web; sin embargo, la idea de un proxy no se limita a los sitios web.

Proxy ADELANTE

La mayor parte de la discusión sobre proxies web se refiere al tipo de proxy conocido como "proxy directo".

El evento de proxy, en este caso, es que el "proxy de reenvío" recupera datos de otro sitio web en nombre del solicitante original.

Una historia de 3 computadoras (parte I)

Por ejemplo, enumeraré tres computadoras conectadas a Internet.

  • X = su computadora o computadora "cliente" en Internet
  • Y = el sitio web proxy, proxy.example.org
  • Z = el sitio web que desea visitar, www.example.net

Normalmente, uno se conectaría directamente desde X --> Z.

Sin embargo, en algunos casos, es mejor que Y --> Zen nombre de X, que las cadenas de la siguiente manera: X --> Y --> Z.

Razones por las cuales X querría usar un servidor proxy de reenvío:

Aquí hay una lista (muy) parcial de usos de un servidor proxy de reenvío:

  • 1) X no puede acceder a Z directamente porque

    • a) Alguien con autoridad administrativa sobre Xla conexión a Internet ha decidido bloquear todo acceso al sitio Z.

      • Ejemplos:

        • El virus Storm Worm se está propagando engañando a las personas para que visiten familypostcards2008.com, por lo que el administrador del sistema ha bloqueado el acceso al sitio para evitar que los usuarios se infecten a sí mismos sin darse cuenta.

        • Los empleados de una gran empresa han estado perdiendo demasiado tiempo facebook.com, por lo que la gerencia quiere que se bloquee el acceso durante el horario comercial.

        • Una escuela primaria local no permite el acceso a Internet al playboy.comsitio web.

        • Un gobierno no puede controlar la publicación de noticias, por lo que controla el acceso a las noticias bloqueando sitios como wikipedia.org. Ver TOR o FreeNet .

    • b) El administrador de Zha bloqueado X.

      • Ejemplos:

        • El administrador de Z ha notado intentos de piratería provenientes de X, por lo que ha decidido bloquear la dirección IP de X (y / o netrange).

        • Z es un sitio web de foro. Xestá enviando spam al foro. Z bloquea X.

REVERSE proxy

Una historia de 3 computadoras (parte II)

Para este ejemplo, enumeraré tres computadoras conectadas a Internet.

  • X = su computadora o computadora "cliente" en Internet
  • Y = el sitio web de proxy inverso, proxy.example.com
  • Z = el sitio web que desea visitar, www.example.net

Normalmente, uno se conectaría directamente desde X --> Z.

Sin embargo, en algunos escenarios, es mejor para el administrador Zrestringir o no permitir el acceso directo y obligar a los visitantes a pasar por Y primero. Así que, como antes, tenemos datos que están siendo recuperados por Y --> Zel nombre de X, que las cadenas de la siguiente manera: X --> Y --> Z.

Lo que es diferente esta vez en comparación con un "proxy de reenvío" es que esta vez el usuario Xno sabe que está accediendo Z, porque Xsolo ve que se está comunicando Y. El servidor Zes invisible para los clientes y solo el proxy inverso Yes visible externamente. Un proxy inverso no requiere configuración (proxy) en el lado del cliente.

El cliente Xpiensa que solo se está comunicando con Y( X --> Y), pero la realidad es que Yreenvía toda la comunicación ( X --> Y --> Znuevamente).

Razones por las que Z querría configurar un servidor proxy inverso:

  • 1) Z quiere forzar todo el tráfico a su sitio web para que pase a través de Y primero.
    • a) Z tiene un sitio web grande que millones de personas quieren ver, pero un solo servidor web no puede manejar todo el tráfico. Por lo tanto, Z configura muchos servidores y pone un proxy inverso en Internet que enviará a los usuarios al servidor más cercano a ellos cuando intenten visitar Z. Esto es parte de cómo funciona el concepto de Red de Distribución de Contenido (CDN).
  • 2) El administrador de Z está preocupado por las represalias por el contenido alojado en el servidor y no quiere exponer el servidor principal directamente al público.
    • a) Los propietarios de marcas de spam como "Canadian Pharmacy" parecen tener miles de servidores, mientras que en realidad tienen la mayoría de los sitios web alojados en muchos menos servidores. Además, las quejas de abuso sobre el spam solo cerrarán los servidores públicos, no el servidor principal.

En los escenarios anteriores, Ztiene la capacidad de elegir Y.

Enlaces a temas de la publicación:

Red de entrega de contenidos

Reenviar software proxy (lado del servidor)

Software de proxy inverso para HTTP (lado del servidor)

Software de proxy inverso para TCP (lado del servidor)

Ver también:

qyb2zm302
fuente
1
TAM (administrador de acceso tivoli) también es un servidor proxy inverso, ¿verdad?
Clark Bao
2
¿Conceptualmente entonces, podríamos referirnos o pensar en un "proxy inverso" como un proxy "forzado"?
Thomas
3
"eso enviará a los usuarios al servidor más cercano a ellos" - ¿Cuál es el punto? Todo el tráfico pasará por ese servidor proxy, ¿verdad? Por lo tanto, no importa dónde esté la ubicación del servidor 'local' detrás de él. ¿O me falta algo?
Pavel
2
@Pavel probablemente "el servidor más cercano a ellos" no es la mejor descripción. Más como "distribuir carga al grupo de servidores" es una mejor descripción. Este ejemplo describía un equilibrador de carga de proxy inverso.
JDS
66
Esta fue la clave para mí: - hacia adelante: (X --> Y) --> Z, inverso: X --> (Y --> Z).
Druckles el
538

Un par de definiciones simples serían:

Proxy de reenvío: Actuar en nombre de un solicitante (o consumidor de servicios)

Proxy inverso: actuar en nombre del servicio / productor de contenido.

Krishna Bheemanakatte
fuente
414

Encontré que el siguiente diagrama es muy útil. Simplemente muestra la arquitectura de una configuración de proxy directo versus inverso del cliente al servidor a través de Internet. Esta imagen lo ayudará a comprender mejor la respuesta de qyb2zm302 y otras respuestas.

Proxy delantero vs proxy inverso

También puede ver el vídeo de F5 's DevCentral por Peter Silva.

Fuente de la imagen: Quora . Sin embargo, según Martijn Pieters , esta imagen podría ser de Pulse Secure Community o del sitio de Julien Pauli (en francés) en developmentpez.com.

Me recordó al proverbio clásico:

Una imagen vale más que 1000 palabras.

Nishant
fuente
99
Esto es realmente todo lo que necesitas mirar. Configurar un proxy en su navegador para que Netflix no sepa en qué país se encuentra es un proxy avanzado; un servicio ascendente que dirige una solicitud entrante (tal vez desee enviar una solicitud a dos servidores) es un proxy inverso.
Kyle Chadha
55
El proxy de reenvío también puede estar en Internet
mac
77
La mejor imagen en la última respuesta. Gracias. :) Un proxy inverso también se conoce como "Load Balancer" y actúa en el lado del servidor (distribuye la carga a diferentes servidores), mientras que un proxy directo es compatible con el lado del cliente.
codepleb
1
El autor de quora no es el autor original de la imagen, ya que esta página de 2013 con una sola revisión es un año más antigua.
Martijn Pieters
1
Puede ser que este tutorial francés de 2009 sea ​​la fuente; la copia del archivo web de 2009 tiene problemas con JavaScript (redireccionamientos continuos), y las imágenes solo se archivaron en 2017, pero la fuente hace referencia a las mismas URL de imágenes que las fuentes posteriores.
Martijn Pieters
230

El proxy directo frente al proxy inverso (2012) explica la diferencia entre los proxies directos e inversos muy claramente.

La respuesta de qyb2zm302 detalla muy bien las aplicaciones de proxies, pero se desliza sobre el concepto fundamental entre proxies hacia adelante y hacia atrás. Para el proxy inverso, X → Y → Z, X sabe acerca de Y y no Z, en lugar de viceversa.

Un proxy es simplemente un intermediario para la comunicación (solicitudes + respuestas). Cliente <-> Proxy <-> Servidor

  • Proxy del cliente: ( servidor <-> proxy ) <-> servidor

El proxy actúa en nombre del cliente. El cliente conoce las tres máquinas involucradas en la cadena. El servidor no lo hace.

  • Servidor proxy: cliente <-> ( servidor proxy <-> )

El proxy actúa en nombre del servidor. El cliente solo sabe sobre el proxy. El servidor conoce toda la cadena.

Me parece que hacia adelante y hacia atrás son simplemente nombres confusos y dependientes de la perspectiva para el proxy del cliente y del servidor . Sugiero abandonar el primero por el segundo, para una comunicación explícita.

Por supuesto, para complicar aún más el asunto, no todas las máquinas son exclusivamente clientes o servidores. Si hay una ambigüedad en el contexto, lo mejor es especificar explícitamente dónde se encuentra el proxy y las comunicaciones que canaliza.

Protongun
fuente
3
Esta respuesta está en línea con httpd.apache.org/docs/2.0/mod/mod_proxy.html#forwardreverse y ayuda a explicarlo claramente
Greg Woods
77
Parece que la característica más relevante en esta comparación es quién sabe quién. proxy directo: el cliente conoce tanto el proxy (de hecho lo tiene configurado) como el servidor de destino (ya que solicita la url del servidor), mientras que, en el caso del proxy inverso, el cliente conoce al proxy como un servidor de destino ( no sabe a qué llama realmente el proxy; puede ser un servidor o más). con un proxy de reenvío, el servidor no sabe quiénes son realmente los clientes, ya que el proxy "lo reenvía". proxy de reenvío: ocultar cliente (s). proxy inverso: ocultar servidor (es).
Belun
@Protongun "... Un proxy es simplemente un intermediario para la comunicación (solicitudes + respuestas) ..." ¿cuál es la necesidad del proxy en primer lugar? Por favor aclarar En mi humilde opinión, esta respuesta debería haber sido la aceptada
vikramvi
El primer enlace en esta publicación lo hace claro y fácil de entender para todos
Legends
@Belun Well explicado en palabras / términos muy simples.
Ilangeeran
129

Algunos diagramas pueden ayudar:

Proxy de reenvío

Proxy de reenvío

Proxy inverso

Proxy inverso

Maria Inés Parnisari
fuente
8
¿Lo es? ¡Se ven iguales! ¿Qué tiene de especial volver a escribir una respuesta que hace que un proxy sea un proxy "inverso"?
8bitjunkie
2
@ 8bitjunkie Se trata de la perspectiva. Observe que, para el proxy directo, el cliente sabe que se está comunicando con un servidor proxy. Para el proxy inverso, el cliente cree que se está comunicando directamente con home.com. Los proxies también tienen diferentes implementaciones. El proxy inverso puede ser bastante estúpido. Todo lo que tiene que hacer es cambiar la dirección y pasar la llamada. Más lógica de red en el cliente, menos en el proxy. El proxy de reenvío, por otro lado, necesita saber de alguna manera que una solicitud de proxy.com () requiere una llamada a service.com. Menos lógica de red en el cliente, más en el proxy.
Kevin
1
Qué significa " traducir myhome.myhosting.com a hom.com" No entiendo la parte de traducción. ¿Te gusta reescribir parte del encabezado de respuesta o algo así?
1252748
También una de las razones para el proxy inverso (basado en lo que entendí de la respuesta aceptada) es que el propósito de hacer esto es dividir el tráfico entrante pesado entre múltiples servidores. ¿En qué parte de esta cadena sucede eso? ¿Es esa otra "regla de entrada"?
1252748
@ 1252748 sobre 1), la traducción simplemente significaría mapear las URL y emitir una solicitud a la URL apropiada. aproximadamente 2), sí, puede configurar el servidor para, por ejemplo, usar round robin para equilibrar la carga de las solicitudes entre servidores.
Maria Ines Parnisari
72

La diferencia está principalmente en la implementación. Los proxies web hacia adelante y hacia atrás tienen las mismas características subyacentes. Aceptan solicitudes de solicitudes HTTP en varios formatos y proporcionan una respuesta, generalmente accediendo al servidor de origen o de contacto.

Los servidores con todas las funciones generalmente tienen control de acceso, almacenamiento en caché y algunas características de mapeo de enlaces.

Un proxy directo es un proxy al que se accede configurando la máquina cliente. El cliente necesita soporte de protocolo para las funciones de proxy (redirección, autenticación de proxy, etc.). El proxy es transparente para la experiencia del usuario, pero no para la aplicación.

Un proxy inverso es un proxy que se implementa como un servidor web y se comporta como un servidor web, con la excepción de que, en lugar de componer localmente el contenido de los programas y el disco, reenvía la solicitud a un servidor de origen. Desde la perspectiva del cliente, es un servidor web, por lo que la experiencia del usuario es completamente transparente.

De hecho, una única instancia de proxy puede ejecutarse como proxy directo e inverso al mismo tiempo para diferentes poblaciones de clientes.

benc
fuente
Solo para estar seguro, ¿un proxy directo es del lado del cliente y un proxy inverso es del lado del servidor?
Yves
44
@yves. Un proxy es también un servidor. Es solo que el cliente necesita una configuración local para poder comunicarse. Mientras que un proxy inverso requiere configuración en el propio servidor. Sus nodos físicos están ambos en el 'lado del servidor'.
Adib Aroui
Solo para información general, no todos los proxies pueden funcionar como hacia adelante y hacia atrás, por ejemplo, SOCKS puede, pero no los proxies HTTP.
RastaJedi
60

Proxy: está haciendo la solicitud en nombre del cliente . Entonces, el servidor devolverá la respuesta al proxy, y el proxy reenviará la respuesta al cliente. De hecho, el servidor nunca "aprenderá" quién era el cliente (la dirección IP del cliente); solo sabrá el proxy. Sin embargo, el cliente definitivamente conoce el servidor, ya que esencialmente formatea la solicitud HTTP destinada al servidor, pero solo la entrega al proxy.

Ingrese la descripción de la imagen aquí

Proxy inverso: está recibiendo la solicitud en nombre del servidor . Reenvía la solicitud al servidor, recibe la respuesta y luego devuelve la respuesta al cliente. En este caso, el cliente nunca "aprenderá" quién era el servidor real (la dirección IP del servidor) (con algunas excepciones); solo sabrá el proxy. El servidor sabrá o no el cliente real, dependiendo de las configuraciones del proxy inverso.

Ingrese la descripción de la imagen aquí

Dimos
fuente
66
Siento que podría copiar y pegar sus definiciones al revés y que seguirían siendo ciertas. No creo que esto explique ninguna diferencia clave o aclare qué es tan "inverso" acerca de un proxy inverso.
8bitjunkie
66
El apoderado siempre actuará en nombre de alguien (ocultando su identidad a la otra parte). El "reverso" se refiere a revertir el lado del cual está "oculto", siendo el cliente en el primer caso (proxy regular) y el servidor en el segundo caso (proxy inverso). De hecho, los términos podrían usarse indistintamente, es solo una cuestión de convención haber seleccionado el primer caso como el proxy regular (probablemente por razones históricas). Espero que esto tenga sentido.
Dimos
44

La mejor explicación está aquí con diagramas:

Mientras que un proxy proxy reenvía en nombre de los clientes ( o solicitando hosts ) , un proxy proxy inverso en nombre de los servidores.

En efecto, mientras que un proxy directo oculta las identidades de los clientes, un proxy inverso oculta las identidades de los servidores.

Farhan
fuente
38

Un servidor proxy representa (y opcionalmente almacena en caché) las solicitudes de red salientes a varios recursos públicos no necesariamente relacionados a través de Internet. Un proxy inverso captura (y opcionalmente almacena en caché) las solicitudes entrantes de Internet y las distribuye a varios recursos privados internos, generalmente con fines de alta disponibilidad.

Ignacio Vazquez-Abrams
fuente
28

Proxy (Proxy de reenvío):

Cuando las computadoras en su LAN se conectan a un servidor proxy que accede a Internet. Los beneficios incluyen solo el servidor expuesto a Internet. Las personas en el exterior no pueden acceder a las computadoras directamente. Los servidores proxy pueden mejorar el acceso a Internet para los usuarios al almacenar en caché las descargas. También se pueden usar para restringir el acceso a ciertos sitios. Además, solo el servidor proxy necesitaría una dirección pública, no los clientes que se conectan a él.

Proxy inverso:

Un proxy inverso es lo contrario de un proxy directo. En su lugar, actúa como un proxy en nombre de los servidores a los que se conecta. En lugar de acceder a un servidor remoto directamente, un usuario pasaría por el proxy inverso y sería dirigido al servidor apropiado desde allí. Solo el proxy inverso necesitaría un certificado SSL, solo se necesitaría una dirección IP pública y puede manejar el equilibrio de carga de las solicitudes entrantes para mejorar la experiencia general del usuario.

Ingrese la descripción de la imagen aquí

Fuente de la imagen: creación de un proxy de reenvío mediante el enrutamiento de solicitudes

JSON C11
fuente
3
En mi humilde opinión, la respuesta más simple / mejor.
Vinicius Gonçalves
12

Desde el punto de vista de Apache, entiendo que proxy significa que si el sitio x representa para el sitio y, las solicitudes de x devuelven y.

El proxy inverso significa que la respuesta de y se ajusta para que todas las referencias a y se conviertan en x.

Para que el usuario no pueda decir que un proxy está involucrado ...

Chris Kimpton
fuente
10

Según mi entendimiento ...

Para empezar, como todos saben, proxy significa "la autoridad para representar a alguien más". Ahora hay dos cosas, proxy directo e inverso.

Proxy de reenvío

Supongamos que desea acceder a "Google" y "Google" a su vez tendrá un número n de servidores para responder a esa solicitud en particular.

Ahora, en este caso, mientras solicita algo de Google y no desea que Google vea su dirección IP, utilizará un proxy de reenvío, como se explica a continuación.

A → B → C

Ahora aquí está A, enviando una solicitud a través de B. Entonces C pensará que la solicitud proviene de B, no de A. De esta manera, puede evitar que la dirección IP de sus clientes no se exponga al mundo exterior.

Proxy inverso

Ahora, en este caso, para hacerle entender, tomaremos el mismo caso de proxy directo. Aquí ha solicitado algo a Google, que a su vez enviará una solicitud al servidor de aplicaciones u otro servidor proxy para obtener la respuesta. Entonces, estas cosas sucederán como se explica a continuación.

A → B → C

C → D

C ← D

A ← B ← C

En el diagrama anterior puede ver que se ha enviado una solicitud a C desde B, no desde A. Luego, desde C habrá una solicitud enviada a D. De manera similar, la respuesta irá a C desde D y luego a B y A.

El diagrama anterior dice que es solo el contexto lo que importa, aunque ambos proxys actúan de la misma manera, pero el proxy del lado del cliente está ocultando la información del cliente, mientras que el proxy del lado del servidor ocultará la información del lado del servidor.

Sourabh Sharma
fuente
10

Los proxies avanzados otorgan al cliente el anonimato (es decir, piense en Tor ).

Los servidores proxy inversos otorgan anonimato a los servidores de fondo (es decir, piensan en servidores detrás de una DMZ).

8bitjunkie
fuente
9

Aquí hay un ejemplo de un proxy inverso (como balanceador de carga).

Un cliente navega a website.com y el servidor al que golpea tiene un proxy inverso ejecutándose en él. El proxy inverso pasa a ser Libra . Pound toma la solicitud y la envía a uno de los tres servidores de aplicaciones que se encuentran detrás de ella. En este ejemplo, Pound es un equilibrador de carga. Es decir, está equilibrando la carga entre tres servidores de aplicaciones.

Los servidores de aplicaciones devuelven el contenido del sitio web al cliente.

ae.
fuente
8

Un proxy directo sirve a los usuarios : ayuda a los usuarios a acceder al servidor .

Un proxy inverso sirve al servidor : protege al servidor de los usuarios .

HoangYell
fuente
4

Si no hay proxy

Para ver desde el lado del cliente y el lado del servidor son los mismos:

Cliente -> Servidor

Apoderado

Del lado del cliente:

Cliente -> proxy -> Servidor

Del lado del servidor:

Cliente -> Servidor

Proxy inverso

Del lado del cliente:

Cliente -> Servidor

Del lado del servidor:

Cliente -> proxy -> Servidor

Así que creo que si lo configura un usuario del cliente, se llama proxy, si lo configura un administrador del servidor, es un proxy inverso.

Debido a que los propósitos y las razones para configurarlo son diferentes, manejan los datos de diferentes maneras y usan un software diferente.

   User side          |      Server side
client  <->  proxy  <-->  reverse_proxy <-> real server
tinyhare
fuente
Sería mejor si su representación gráfica pero buen contenido. @ Tinyhare
Narendra
3

Mirando desde la perspectiva del usuario: al enviar una solicitud a un servidor proxy o servidor proxy inverso :

  • proxy : requiere dos argumentos :

    1) qué obtener y 2) qué servidor proxy utilizará un intermediario

  • proxy inverso : requiere un argumento :

    1) qué obtener

Un proxy inverso obtiene contenido de otro servidor sin que el usuario lo sepa y devuelve el resultado como si se hubiera originado en el servidor proxy inverso .

pspi
fuente
1

La mayoría de las respuestas anteriores son buenas, pero en mi opinión ninguna se acerca mucho a abordar suficientemente la calidad "inversa" que diferencia a las dos. Para hacer eso, se debe dar alguna forma de visualizar la naturaleza "inversa" de lo que es esencialmente lo mismo (un proxy), y se debe dar de una manera bien abstracta.

Un proxy (implícitamente "proxy de reenvío") conecta varios clientes locales a cualquier servidor remoto:

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

Un proxy inverso conecta varios servidores locales a cualquier cliente remoto (observe cómo se invierte el diseño):

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

Es una cuestión de perspectiva comprender realmente y adecuadamente el concepto, requiere abstraer los detalles no esenciales (para el concepto particular), aunque pueden ser muy importantes cuando se trata de la pragmática de la operación proxy. Tales detalles incluyen el hecho de que en ambos escenarios la realidad es que varios clientes se conectan a múltiples servidores, que los clientes y servidores pueden no ser realmente locales o remotos, dónde se encuentra la nube de Internet o qué tipo de visibilidad existe entre el cliente y el servidor.

Fotios Basagiannis
fuente
"múltiples servidores locales para cualquier cliente remoto" - hm, ¿por qué no múltiples servidores para múltiples clientes? Quiero decir: el servidor en sí no se conecta a los clientes de todos modos, solo responde a las solicitudes de los clientes, sin importar si son múltiples clientes o el mismo cliente.
JustAMartin
Lea nuevamente, especialmente el último párrafo e intente entender "cualquier cliente remoto" como uno de los muchos casos de operación
Fotios Basagiannis
El texto está bien, es solo que el segundo diagrama me hizo pensar de repente "oye, ¿a dónde fue el otro cliente?" cuando lo comparé con el primer diagrama.
JustAMartin
Sí, es porque ese cliente no es ninguno de los otros dos. Los desarrolladores tienden a pensar en términos muy concretos y específicos porque esto es lo que ayuda cuando se implementan cosas, sin embargo, esa misma forma de pensar no es muy útil cuando se piensa en abstracciones.
Fotios Basagiannis