Reverse Proxy Apache 2
De Wikillano
Tenemos 2 máquinas URANO y NEPTUNO, las peticiones web llegan a Neptuno este aloja el dominio principal https://glue.homeip.net y como no tengo otro las webs colgaran del mismo, así que si quiero ir a la página “web1” debería de poner algo tal que así https://glue.homeip.net/web1.
Imaginemos que esta web no la podemos alojar en el servidor Neptuno debido a incompatibilidades con versiones de php mysql etc..., pero mira por donde tenemos un servidor web en el cual si podría funcionar, Urano. lo que haremos será que neptuno haga de proxy pasando las webs que el no pueda hacer funcionar a Urano. y esto se llama Reverse Proxy.
Los dos servidores tienen Apache2
URANO
Como la web irá a parar a Urano, tenemos que crear un virtualhost en el, para cuando llegue la petición desde Neptuno sepa que hacer.
en /etc/apache2/sites-available/ creo el siguiente fichero dot.glue.homeip.net.
Este nombre de dominio es inventado, no existe como dominio pero lo he creado así para no liarme, dot es la web/aplicación y lo demás el dominio principal. este dominio lo utilizará Neptuno para reenviar las peticiones.
dentro de este fichero añadimos el virtualhost de este dominio:
NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin ballano@ya.com DocumentRoot /var/www/demos/dot/ ServerName dot.glue.homeip.net ##SSL## SSLEngine on SSLCertificateFile /etc/apache2/ssl/servidor-cert.pem SSLCertificateKeyFile /etc/apache2/ssl/server.key SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown </VirtualHost>
De esta manera cuando llegue una peticion de dot.glue.homeip.net se le mostrará el contenido de /var/www/demos/dot/ que es donde esta alojada la aplicación.
NEPTUNO
habilitamos el modulo mod_proxy:
a2enmod proxy
Una vez hecho esto deberemos añadir SSLProxyEngine on (ya que nuestro servidor utiliza SSL) y modificar los permisos (Allow/deny) en la configuración del modulo proxy, en:
neptuno:/etc/apache2/mods-available# vim proxy.conf
quedando de la siguiente manera:
#turning ProxyRequests on and allowing proxying from all may allow
#spammers to use your proxy to send email.
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
#Allow from .your_domain.com
</Proxy>
# 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
SSLProxyEngine on
ProxyVia On
# To enable the cache as well, edit and uncomment the following lines:
# (no cacheing without CacheRoot)
CacheRoot "/var/cache/apache2/proxy"
CacheSize 5
CacheGcInterval 4
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheDefaultExpire 1
# Again, you probably should change this.
#NoCache a_domain.com another_domain.edu joes.garage_sale.com
</IfModule>
Este es el virtualhost de mi dominio principal en Neptuno, como las webs/aplicación colgarán de el, debo poner la configuración proxy dentro del mismo:
NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin ballano@ya.com ServerName glue.homeip.net DocumentRoot /var/www/ ################## ##Proxy Pass DOT## ################## ProxyPass /dot/ https://dot.glue.homeip.net/ ProxyPassReverse /dot/ https://dot.glue.homeip.net/ SSLEngine on SSLCertificateFile /etc/apache2/ssl/servidor-cert.pem #SSLCertificateKeyFile /etc/apache2/ssl/serv-priv.pem SSLCertificateKeyFile /etc/apache2/ssl/server.key </VirtualHost>
Hemos añadido al virtualhost lo siguiente:
################## ##Proxy Pass DOT## ################## ProxyPass /aplicacion/ https://dot.glue.homeip.net/ ProxyPassReverse /aplicacion/ https://dot.glue.homeip.net/
Como vemos el proxy (neptuno) envia las peticiones a https://dot.glue.homeip.net/ cuando recibe una URL como https://glue.homeip.net/aplicacion/
todo lo que vaya a dominio/aplicacion/ se va por el proxy a https://dot.glue.homeip.net/ que es el dominio que creamos en Urano.
Pero como sabe Neptuno quien es ese dominio?, añadiremos en el hosts tanto de Neptuno como Urano lo siguiente:
vim /etc/hosts
ip_interna_servidor dot.glue.homeip.net
Deberemos poner la ip donde esta alojado el dominio inventado en este caso Urano 192.168.1.8. ahora Neptuno ya sabe quien es el dominio y no tendrá ningún problema al enviarle las peticiones a traves del proxy.
Simpre que habilitemos Virtualhost, mods o cambiemos cualquier fichero de conf de apache habrá que pararlo y volverlo a arrancar.
#/etc/init.d/apache2 stop #/etc/init.d/apache2 start
Links
