Una de las muchas cosas que se pueden hacer con Apache httpd es montar un Proxy Inverso. En este post vamos a estar hablando un poco sobre el concepto teórico, los beneficios y la implementación para llevarlo a cabo.
Proxy
Se denomina proxy a un intermediario. En el mundo web, el proxy es un servidor intermedio entre la conexión entre el cliente y el servidor. Los beneficios podrían ser, por ejemplo, evadir restricciones geográficas para acceder a un sitio web, o agregar una capa de anonimato para que el servidor desconozca quien es realmente el servidor que hace la petición, entre otros beneficios.
Proxy Inverso
Habiendo definido lo que es un proxy, se entiende que un proxy inverso funciona de la misma forma pero en dirección contraria. En ves de ser el servidor quien desconoce la identidad del cliente, en este caso es el cliente quien desconoce la identidad del servidor. El cliente se comunica con el proxy y este redirecciona al cliente al servidor que corresponda.
El uso general del patrón de Proxy Inverso es lo que conocemos como balanceadores o Load Balancers, donde una misma aplicación esta instanciada varias veces en distintos servidores, y el proxy redirecciona a uno y otro dependiendo de la concurrencia que haya en estos.
Otro caso común es el redireccionamiento a un servidor o aplicación dependiendo de la URL, funcionando el Proxy Inverso como una entrada o Gateway a un ecosistema de servicios que no tienen ninguna conexión con el exterior mas que este proxy, permitiendo que las conexiones internas se den sin seguridad, dejando esta responsabilidad solamente al punto de entrada.
Implementación básica
Con Apache la configuración de un Proxy Inverso es muy simple, creando un nuevo archivo que termine con la extensión .conf, agregaremos estas directivas:
<VirtualHost *:80>
ProxyPass "/test" "www.ejemplo.com"
ProxyPassReverse "/test" "www.ejemplo.com"
ProxyPass "/test2" "127.0.0.1:8081"
ProxyPassReverse "/test2" "127.0.0.1:8081"
</VirtualHost>
Las directivas que utilizamos en este pequeño archivo de configuración son las siguientes:
VirtualHost la utilizamos para crear un host virtual en nuestro servidor que tome todas las peticiones que entren por cualquier dirección ip en el puerto 80 (la expresión *:80).
ProxyPass es la directiva que va a tomar todas las peticiones que empiecen con "/test" y las va a redireccionar a la url de ejemplo, también se podría redireccionar a la misma ip con distinto puerto si se tuvieran distintas aplicaciones en ese mismo servidor con la misma ip.
ProxyPassReverse es una directiva que sirve para reemplazar la dirección original del servidor por la del Proxy Inverso, modificándola en la cabecera "Direction" en la petición http.
Con estas tres directivas ya podemos empezar a hacer nuestro propio Proxy inverso redireccionando las peticiones con cierta ruta a las URL o puerto que nosotros queramos.