Apache reverse proxy (Linux)



Imaginemos un caso en el cual requerimos publicar aplicaciones que están en diferentes servidores pero por alguna razón solo disponemos de una ip pública y/o dominio y solo podemos usar un puerto.

En este caso podemos apoyarnos de una característica de apache para resolver el problema de manera sencilla, a esta característica se le conoce como "reverse proxy".

Un reverse proxy nos da la posibilidad de que un servidor muestre contenido de otros servidores de manera transparente.

Supongamos que contamos con el escenario es el siguiente:
  • Dominio: midominio.com
  • Puerto: 80
  • Servidor proxy apache (192.168.1.1)
  • Servidor php apache (192.168.1.2)
  • Servidor java tomcat  (192.168.1.3)
  • Servidor .net iis (192.168.1.4)

Lo que haremos es usar el reverse proxy para publicar las aplicaciones usando el mismo dominio y diferenciándolas por el contexto, es decir, si un usuario teclea en su navegador http://midominio/tomcat se recibirá la petición en el reverse proxy (192.168.1.1) y la redirigirá al servidor tomcat. Del mismo modo http://midominio/apache, nos redirigirá al servidor apache, tal y como lo muestra el siguiente diagrama.



Firewall

Lo primero que hay que hacer es abrir el puerto (en este caso 80) en nuestro firewall para que las peticiones sean redirigidas a nuestro webproxy (esto puede variar dependiendo del firewall que estemos utilizando)

Activando el módulo de proxy en apache.


Debemos activar los módulos proxy y proxy_http en el servidor proxy (en este caso 192.168.1.1) para esto ejecutaremos el comando:

$ sudo a2enmod proxy proxy_http

Configurando el web proxy.

Editaremos el archivo  /etc/apache2/sites-enabled/default.conf ( este puede ser distinto dependiendo de la distribución que estemos usando, en este caso es debian ) en el web proxy para que quede de la siguiente manera:


 <VirtualHost *:80 >  
  ServerName "midominio.com"  
  DocumentRoot /var/www/  
  DirectoryIndex index.html index.php  
  <Directory "/var/www/">  
   AddDefaultCharset UTF-8  
   AllowOverRide none  
   Options FollowSymlinks  
   Order allow,deny  
   Allow from all  
   RewriteEngine on  
  </Directory>  
  ProxyRequests On  
  ProxyVia On  
  ProxyPass /apache/ http://192.168.2/  
  ProxyPassReverse /apache/ http://192.168.2/  
  ProxyPass /tomcat/ http://192.168.1.3:8080/  
  ProxyPassReverse /tomcat/ http://192.168.1.3:8080/  
  ProxyPass /iis/ http://192.168.1.4/  
  ProxyPassReverse /iis/ http://192.168.1.4/  
 <Proxy *>  
   Order deny,allow  
   Deny from all  
   Allow from all  
  </Proxy>  
 </VirtualHost>  


Como podemos ver se hace un mapeo usando las instrucciones ProxyPass y ProxyPassReverse

  ProxyPass /apache/ http://192.168.2/  
  ProxyPassReverse /apache/ http://192.168.2/ 

Además de permitir las peticiones al proxy con la siguiente sección:

<Proxy *>  
   Order deny,allow  
   Deny from all  
   Allow from all  
  </Proxy>  

Solo resta reiniciar el servicio de apache para que los cambios sean reflejados.

sudo /etc/init.d/apache2 restart

De esta manera, podremos publicar aplicaciones de distintos servidores teniendo un proxy que se encargue de recibir todas las peticiones y distribuirlas al servidor correspondiente, desde luego este no es el escenario ideal en el caso de ser aplicaciones con alta carga, sin embargo, para publicar aplicaciones de prueba o con pocos usuarios es una buena opción.

Para mayor información podemos consultar la documentación oficial de apache.


Comentarios

Entradas populares de este blog

Odisea 3G Huawei E173

Nessus Arch Linux

De dados y cubos con puntos