Migración web con propagación de DNS: Apache como Reverse Proxy

En estas últimas semanas hemos tenido que realizar algunas migraciones de algunas webs que teníamos online a otra infraestructura que nos han proporcionado.

Las principales problemáticas de realizar esta migración web son que no hubiera ninguna pérdida de información, ni inconsistencia de datos en el proceso, además de mantener el servicio online durante este, logrando que sea totalmente transparente para los usuarios.

Para realizar esta acción nos hemos apoyado en configurar Apache como reverse proxy.

¿Que es un reverse proxy?

Básicamente, un reverse proxy, emplea la idea de un proxy tradicional que tenemos en mente toda la vida. El servidor actúa de puente con las peticiones que recibe rebotándolas al servidor original, siendo un proceso transparente para el usuario, el cual desconoce que no está llamando al servidor original directamente.

Esta herramienta nos puede proporcionar ventajas a la hora de implementar tests A/B, proteger nuestro servidor principal, servir de firewall, entre otras ventajas, pero vamos a ver cual fue el objetivo en nuestra migración.

¿Qué ganamos con esto? Pues básicamente una vez que esté listo y sincronizado el nuevo servidor de producción, el servidor antiguo empieza actuar de proxy, por lo que aquellos clientes que no tengan las DNS actualizadas tras realizar el cambio, puedan seguir teniendo servicio y llegando al servidor nuevo de producción.

Esta opción no acelera el proceso de propagación DNS, pero nos evita dolores de cabeza asociados a la espera de la propagación por todo internet, llegando el cambio a todas las regiones del mundo y a los navegadores/aplicaciones que tengan cacheada la traducción DNS.

En nuestro caso, en uno de los proyectos que hemos migrado, se trata de una web donde los usuarios pueden leer ciertos libros online, almacenando información de la sesión y trackeando las acciones del usuario. Esta información es importante y no debe perderse ni corromperse, además el servicio debía de mantenerse activo, ya que el target principal son lectores españoles y latinoamericanos, con lo que conlleva el cambio horario y el tiempo de propagación. En otros desarrollos internos, donde el tráfico de usuarios es muy bajo en ciertos rangos de tiempo, no sería necesario andar con tanto cuidado, pudiendo dejar de dar servicio por unos breves minutos.

Resumen del proceso de migración

  1. Sincronizamos el nuevo servidor con el estado de producción
  2. Configuramos nuestro servidor web como proxy, desactivando los sites del servidor antiguo
  3. Nos aseguramos que las peticiones estén entrando correctamente en producción
  4. Cambiamos las DNS en nuestro proveedor.

¿Como configuramos apache como reverse-proxy?

Este proceso lo hemos realizado en un entorno LAMP sobre ubuntu server 14.04. Lo primero que debemos hacer es autenticarnos en el servidor via ssh para activar el modulo de apache proxy_http:

sudo a2enmod proxy_http

Una vez hemos activado el módulo, debemos de generar la configuración del proxy como si de un virtual host se tratara, para ello generamos el ficheroproxy.conf en /etc/apache2/sites-available/

Pegando la siguiente configuración.

<VirtualHost *:80>
ServerName dominio.com
ServerAlias www.dominio.com
ErrorLog ${APACHE_LOG_DIR}/proxy-error.log
CustomLog ${APACHE_LOG_DIR}/proxy-access.log combined
ProxyRequests Off
ProxyPass / http://dominio.com
ProxyPassReverse / http://dominio.com
</VirtualHost>

Además tenemos que forzar la DNS en el propio servidor, para que sepa que dominio.com está ya en la nueva ip para ello modificaremos el fichero /etc/hosts de la máquina.

127.0.0.1 localhost
<nueva_ip> dominio.com

En el caso de que también tuvieramos que configurar el puerto 443, la configuración es muy parecida, simplemente indicando que se activa el protocolo ssl además de indicar el certificado.

Una vez tengamos el fichero y el hosts cambiado, activamos el site y reiniciamos apache:

sudo a2ensite my-proxy
sudo service apache2 restart

Una vez reiniciemos el apache podemos revisar en access.log las peticiones en ambos servidores, comprobando que hemos configurado correctamente el proxy.

Conclusiones

Un reverse-proxy puede ser increíblemente útil para simplificar el proceso de mover aplicaciones a otros servidores, y poner bajo control el momento exacto en el que el nuevo servidor comienza a servir peticiones a tu dominio, pero hay algunas cosas que hay que tener en cuenta a la hora de implementar esta solución.

  1. El TTL de propagación de las DNS.
  2. Configurar adecuadamente el ssl en el puerto 443.
  3. Cuando estés 100% seguro de que las DNS se han propagado debes apagar el servidor antiguo.

Artículos interesantes relacionados con el tema

Fuente original: http://adrianalonso.es/2016/05/migracion-web-con-propagacion-de-dns-apache-como-reverse-proxy/

Full Stack Web Developer — adrianalonso.es

Full Stack Web Developer — adrianalonso.es