balanceo de carga con apache y mod_proxy

Posted on Thu 14 April 2011 in tools • 1 min read

El uso de mod_proxy de apache tiene muchas utilidades y gracias a su sencillez de configuración, nos puede sacar de muchos apuros.

En este caso lo vamos a usar para balancear la carga sobre unos servidores web en python llamado tornado http://www.tornadoweb.org que sirve un framework en python. Usaremos el llamado proxy inverso

Instalamos mod_proxy si no lo tenemos ya y activamos los modulos proxy, proxy_balancer, proxy_html, lo mejor en poner proxy* para que a2enmod active lo que necesite

root@lnxport:~# apt-get install libapache2-mod-proxy-html
root@lnxport:~# a2enmod proxy*

Un vez instalado y activado el modulo en apache, necesitamos configurarlo en el archivo apache2.conf dentro de un VirtualHost

ProxyRequests Off
<Proxy balancer://tornadocluster>
   DefaultType application/octet-stream
   BalancerMember http://127.0.0.1:9000
   BalancerMember http://127.0.0.1:9001
   BalancerMember http://127.0.0.1:9002
   BalancerMember http://127.0.0.1:9003
</Proxy>
ProxyPass /appname balancer://tornadocluster/appname
ProxyPassReverse /appname balancer://tornadocluster/appname

En esta configuración vamos a usar el proxy sobre unos puertos internos en la maquina, pero se pueden usar direcciones externas indistintamente. Ademas se pueden usar diferentes algoritmos de balanceo, podeis encontrar mas información en la doc del modulo http://httpd.apache.org/docs/2.0/mod/mod_proxy.html

Como es un proxy inverso, o sea que tiene que traducir, tanto la salida como la entrada, se usan las directivas ProxyPass y ProxyPassReverse

Con esta simple configuración podemos hacer ver al usuario que esta navegando por nuestro site, sin saber que por detras, apache esta conectando con otros servidores para presentar los datos necesarios.