MICRO HOWTO DE REVERSE PROXY CON APACHE
Version 1.2
2005/03/13
----------------------------------------------------------------------
Cambios: Tal como estaba, este howto dejaba un open proxy, lo cual no
es nada bueno. se cambió el parámetro ProxyRequests a Off
corrigiendo el problema con eso.
----------------------------------------------------------------------
Hacer Proxy Inverso de multiples servidores web internos desde Apache.
Si te ha pasado que tienes más de un servidor interno que quieres exponer
a internet, y sólo dispones de una IP, entonces iptables solamente te sirve
si redirijes otro puerto al puerto 80 de la maquina interna.
Desafortunadamente, muchas empresas por seguridad se "evitan problemas" y dan
salida solamente al puerto 80 destino, con lo cual dejan fuera del alcance del
usuario cualquier site con puerto diferente al 80, por ejemplo, el 8080, el 81,
el 8000, etc.
qué hacer en estos casos? la única solución es un proxy, pero inverso. de fuera
hacia dentro de tu red. Si ya cuentas con squid, la misma documentación de Squid
te dice que éste puede ser usado como proxy bidireccional. sin embargo, la
configuración no es intuitiva y puede ser un dolor de cabeza dejarlo
funcionando. (cosa que me pasó a mi. nunca pude hacer proxy del servidor que
estaba dentro).
Esto nos deja con el único otro software que puede hacer proxy de http, sin
que interfiera entre nuestro servidor apache y nuestro squid si lo tenemos:
Apache mismo.
el truco está en activar el módulo mod_proxy.
en tu http.conf deberás activar/añadir esta linea:
AddModule mod_proxy.c
Cabe aclarar que estamos en el supuesto de que apache fué sido compilado con
soporte de mod_proxy. si no está compilado con soporte de mod_proxy, deberás
recompilar configurandole que SI lo incluya. Viene desde fuente ya incluido. Por
ejemplo, Slackware incluye el mod_proxy por default.
luego en la sección de proxy:
#
# Proxy Server directives. Uncomment the following lines to
# enable the proxy server:
#
ProxyRequests Off
Order deny,allow
Allow from all
y ya al final en tus virtual hosts:
NameVirtualHost *
ServerAdmin webmaster@correo.mio
ServerName elproxiado.midominio.com
ProxyPass / http://10.0.0.2/
ProxyPassReverse / http://10.0.0.2/
ErrorLog logs/elproxiado-error_log
CustomLog logs/elproxiado-access_log common
Y eso es todo. Aqui asumo que la ip interna del otro servidor es 10.0.0.2 .
Notese que en ProxyPass lo primero que aparece es una diagonal "/" esto es
porque podemos decirle a apache a partir de cual directorio queremos nosotros
que inserte el otro sitio web.
Qué quiero decir copn esto? Digamos que mi server es http://redimido.glo.org.mx
y quiero meter dentro de mi sitio a todo el sitio del glo.
Simple:
ServerAdmin redimido@glo.org.mx
ServerName redimido.glo.org.mx
ProxyPass /glo http://www.glo.org.mx
ProxyPassReverse /glo http://www.glo.org.mx
Asi, si alguien accesa http://redimido.glo.org.mx/glo estará en realidad
accesando el sitio web del glo. Igualmente puedo insertar un subdominio de otro
sitio, y asi puedo tener las referencias "en vivo" dentro de mi site.
Tiene desventajas? Claro. Si hago proxy inverso de un servidor externo al
servidor donde corro el proxy inverso, estaré consumiendo mi ancho de
banda para bajar lo que el usuario pida, y luego lo volveré a consumir
entregandole al usuario lo que pidió. Por eso no es recomendable hacer proxy
inverso de servidores ajenos a mi.
Esta tecnología está bién para el caso de tener toda una granja de servidores
web enmascarados por una sola ip externa, por ejemplo. o hacer proxy inverso de
algún servidor interno que responde a velocidad de LAN (típicamente 100
megabits).
Es extremadamente útil cuando tienes un servidor apache y llega un servidor
IIS y tu no quieres perder tu página en apache, y pues solamente "haces proxy"
al servidor IIS mediante un subdominio o un directorio de tu site.
Con mis agradecimientos al que preguntó en Experts Exchange algo equivocado,
pero que me terminó haciendo ver la luz =)
Espero les sea útil.
Creado por Gabriel Orozco Ruiz Velazco
Correo: redimido -en- glo.org.mx
Página donde se obtiene la versión más reciente: http://redimido.glo.org.mx
Liberado bajo la Licencia de Documentación GNU.