Proxy inverso

Proxy inverso

Podemos usar un proxy inverso para dos cosas:

  1. Si tenemos en nuestra red local varios servidores web y queremos acceder a ellos desde internet, podemos redirigir las entradas DNS a nuestro servidor que tendrá instalado un proxy que será el que sirva las peticiones hechas a cada uno de los servidores webs.
  2. Cachear las respuestas de los servidores webs por lo que conseguimos acelerar la respuesta de nuestro servicio.

Planteamineto del problema

Partimos que en nuestra red interna (10.0.0.0/24) tenemos dos servidores webs apache2 en dos máuinas (por ejemplo bobesponja y patricio).

  • En bobesponja (10.0.0.1) vamos a tener un virtual host www.prueba1.es
  • En patricio (10.0.0.2) vamos a tener un virtual host www.prueba2.es

El proxy inverso lo vamos a instlar en nuestra máquina anfitriona, que va hace el papel de router, por lo que podemos suponer lo siguiente:

  • Nuestra máquina anfitriona tiene una interfaz (virbr1) con dirección 10.0.0.128 que conecta con nuestra red local y una interfaz eth0 (para este ejemplo vamos a suponer que tiene la dirección 172.22.2.1) que conecta con la red del ciclo formátivo y vamos a suponer que es la "ip pública", es decir desde otro ordenador en la misma red 172.22.X.X vamos a acceder a www.prueba1.es y www.prueba2.es que estan alojados en un red local, que por tanto no es aceesible sin el uso del proxy inverso.
  • En nuestra máquina canfitriona vamos a configurar el /etc/Hosts para que se conozca en que máuina esta cada nombre.

    10.0.0.1 www.prueba1.es
    10.0.0.2 www.prueba2.es

  • En nuestra máquina cliente, y simulando la configuración DNS real, apuntamos los dos nombres de los virtual hosts a nuestra mauina anfitriona que tiene instlado el router.

    172.22.2.1 www.prueba1.es www.prueba2.es

Configuración de squid

1) Le indico que escuche por el puerto 80 y que es un host virtual:

http_port 80 vhost

2) Permito la conexión desde el exterior, es decir para nosotros ddesde la red 172.22.0.0/16:

acl localnet src 172.22.0.0/16
http_access allow localnet

3) Permito que solo tengamos acceso a los dominios deseados, esto es nos permite tener mayor seguridad, para que nuestro proxy solo resuelva para las url que tenemos asociadas.

acl webinternas dstdomain prueba1.es. prueba2.es.
http_access allow webinternas

4) Le indicamos que se conecte de forma directa a los servidores de la red internos:

acl ServidoresLocales dst 10.0.0.0/24          
always_direct allow ServidoresLocales

Probamos desde la maquina cliente el acceso a las dos páginas.

Mejora del rendimiento

En un proyecto integrado presentado por un alumno podemos comprobar la mejora de rendimiento usando un proxy inverso accediendo a una página dinámica en php:

Para una prueba del tipo:

ab -n100 -c5 -k http://184.72.155.144/wordpress/

obtenemos los siguientes resultados:

Last modified: Friday, 3 February 2012, 12:17 PM