domingo, 14 de noviembre de 2010

Proxy Reverso con Apache

Tengo una sola dirección ip pública, y 3 diferentes servidores web, cada uno con un dominio diferente. El problema es que son 3 servidores virtuales, la solución es Usar Proxy Reverso con apache.
Definimos algunos de los 3 servidores como el principal, este tomara todas las peticiones y redireccionara a los otros dos subdominios, esto con el fin, de no tener que usar por ejemplo en el dominio2, algo como www.dominio2.com:8080, en este caso podremos ver www.dominio2.com aunque en realidad el que esta respondiendo es el otro servidor web.

Para usar esta solución el servidor que designemos como principal debe ser un apache, los otros pueden ser cualquier cosa.



Para la instalación debe de habilitarse el módulo de apache
2enmod proxy_http

Luego de activar el módulo es necesario editar el archivo de configuración del mismo, ubicado en /etc/apache2/mods-enabled, de la siguiente manera, permitiendo solo acceso a las peticiones que vengan desde el servidor web expuesto a internet


#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.

ProxyRequests Off


AddDefaultCharset off
Order deny,allow
Allow from IPPUBLICA
#Allow from localhost


# Enable/disable the handling of HTTP/1.1 "Via:" headers.
# ("Full" adds the server version; "Block" removes all outgoing Via: headers)
# Set to one of: Off | On | Full | Block

ProxyVia Full



Luego en el servidor virtual expuesto a internet configuramos el virtual host, del dominio, del cual se reenviarán las peticiones al otro servidor, pero será transparente para el usuario



ServerName dominio2.com
ServerAdmin webmaster@dominio2.com


ProxyPreserveHost On
ProxyPass / http://IPWEB2/ (Aqui la ip del webserver que no esta directo a internet)
ProxyPassReverse / http://IPWEB2/





En el servidor en el cual se redirigirán las peticiones no es necesario realizar ninguna modificación.