Windows Azure Virtual Machine: múltiples sitios en una VM #windowsazure

Dos clientes diferentes, uno en Santiago y otro en Bogotá me han preguntado cómo pueden hospedar distintos sitios web en una máquina virtual de Windows Azure, cada una con su propio dominio. En este artículo se muestra como hospedar 3 sitios web en misma máquina virtual cada uno con su propio DNS. Los sitios de prueba son los siguientes:

  1. xxx.jpgarcia.cl
  2. yyy.jpgarcia.cl
  3. zzz.agrotrade.cl

Los tres sitios anteriores se encuentran en la misma máquina virtual, la que pertenece al  Cloud Services multisitio.cloudapp.net. La idea es que cuando un usuario cargue en su navegador una de esas URL, el DNS server lo envía a al cloud service. Este mediante la configuración de EndPoint de la máquina virtual (VM), envía el requerimiento al puerto 80 de la VM. En este momento es cuando el ARR intercepta la llamada y utilizando las reglas de ruteo envía el requerimiento al sitio web que corresponda, el cual está hospedado en la misma máquina virtual pero en diferente puerto. Todo esto es trasparente para el usuario final, quien no sabe que todo esto está ocurriendo tras bambalinas. La figura 1, muestra el ejemplo de lo que ocurre cuando se llama al sitio http://xxx.jpgarcia.cl. El requerimiento es ruteado por ARR al sitio xxx hospedado en el puerto 8080.

0

Ahora vamos a revisar cómo configurar el escenario de ejemplo paso a paso, lo que dará como resultado que hospedaremos 3 sitios en la misma VM, cada uno con su propio DNS.

Paso 1: Dar de alta una máquina virtual con IIS 7

Primero creamos una máquina virtual en Windows Azure desde la galería con la imagen de Windows Server 2012 Datacenter. Los datos para la creación son los siguientes:

  • Virtual machine name: vmMultiSitio
  • Size: Large
  • New user name: jpg
  • Password: xxxxxx
  • DNS name: multisitio

Se termina el asistente y comienza el aprovisionamiento de la VM.

1

Una vez aprovisionada la VM nos conectamos utilizando terminal server. La instalación  de Internet Information Server (IIS) se hace agregando el rol Web Server (IIS) desde la consola de Server Manager, siguiendo el asistente con todas las opciones por defecto.

2

Una vez terminada la agregación del Rol obtenemos esta confirmación.

Paso 2: Crear los 3 sitios Web en la VM

Ahora,  nos movemos a la consola Internet Information Server (IIS) Manager para crear los 3 sitios Web que se hospedaran en este servidor. Por defecto tenemos un sitio Web llamado Default Web Site que está configurado en el puerto 80. Ahora creamos el sitio Web llamado XXX, como se muestra en la siguiente imagen.

4

Ahora, en el sitio xxx, creamos la página HMTL llamada iisstart.html con el siguiente código.

<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>Microsoft Internet Information Services 8</title>
	</head>
	<body>
		Hola Soy el Servido XXX del puerto 8080
	</body>
</html>

Para el segundo sitio ocupamos la siguiente configuración cuando creamos el sitio Web.

5

Volvemos a crear una página HTML llamada iisstart.html con el siguiente código pero en el directorio del sitio yyy.

<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>Microsoft Internet Information Services 8</title>

	</head>
	<body>
		Hola Soy el Servido YYY del puerto 8081
	</body>
</html>

Por último, creamos el tercer sitio llamado zzz para el sitio xxx.agrotrade.cl con la siguiente configuración.

6

Volvemos a crear una página HTML llamada iisstart.html con el siguiente código pero en el directorio del sitio zzz.

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>Microsoft Internet Information Services 8</title>
	</head>
	<body>
		Hola Soy el Servido ZZZ del puerto 8082
	</body>
</html>

Al terminar estos 3 sitios, tenemos la siguiente vista de sitios en nuestro servidor.

7

Paso 4: Instalar Application Request Routing (ARR)

Ya tenemos nuestra máquina virtual con II8 Instalado y los sitios Web creados. Ahora, vamos a instalar ARR utilizando la herramienta Get New Web Platform Components, desde el menú de acciones al nivel de servidor, como se muestra en la siguiente imagen.

8

Esta acción nos lleva a un sitio web donde tenemos el botón de instalación. No podemos descargar nada hasta cambiar la configuración IE Enhanced Security Configuration, lo configuramos como Off para administradores.

9

Volvemos a IE, lo reiniciamos, bajamos el software  y lo ejecutamos inmediatamente. Cuando esté listo, nos presenta la pantalla de Web Platform Installer 4.5. Aquí buscamos ARR, seleccionamos Application Request Routing 2.5 y luego hacemos click en instalar.

10

Finalizado el proceso de instalación, obtenemos la siguiente confirmación.

11

Cerramos IIS Manager.

Antes de configurar el DNS, agregamos un EndPoint en la VM llamado www, no balanceado como muestra la siguiente figura. La idea es que todos los requerimientos lleguen al puerto 80 de balanceador de carga del Cloud Services y de ahí se lo envíe al puerto 80 de nuestra máquina virtual.

11a

Paso 5: Configurar DNS de los 3 sitios Web

Ya tenemos VM con IIS 8,  los 3 sitios Web creados y ARR instalado. Ahora necesitamos ir a nuestro servidor de DNS y configurar que las URL xxx.jpgarcia.cl, yyy.jpgarcia.cl y zzz.agrotrade.cl para que utilizando el registro CNAME sean direccionados al Cloud Services multisitio.cloudapp.net.

En este punto depende de que herramienta de DNS que se utilice, yo uso WordPress.com. En la siguiente imagen podemos ver los registros CNAME destacados en amarillo.

12

Ahora, para la URL zzz.agrotrade.cl tenemos el siguiente registro.

13

Ahora hacemos las pruebas de configuración de DNS.

1. Cargamos http://multisitio.cloudapp.net/  y vemos la página por defecto de IIS 8, que se sirve desde el Web Server llamado Default.

14

2. Cargamos http://xxx.jpgarcia.cl/ y vemos la página por defecto de IIS 8, que se sirve desde el Web Server llamado Default.

15

3. Cargamos http://yyy.jpgarcia.cl/ y vemos la página por defecto de IIS 8, que se sirve desde el Web Server llamado Default.

16

4. si cargamos http://zzz.agrotrade.cl/ y vemos la página por defecto de IIS 8, que se sirve desde el Web Server llamado Default al igual que los 3 casos anteriores.

Paso 6: Configurar las reglas de ruteo

Llegamos ahora a la parte más importante del artículo, es aquí donde vamos a configurar las reglas de ruteo basados en el la variable HTTP_HOST. Volvemos a IIS Manager y en el nivel de servidor seleccionamos el icono URL Rewrite. Entonces, en acciones seleccionamos Add Rule(s), y en el primer dialogo utilizamos Blank rule con los siguientes valores para el sitio xxx.

17

18

19

Para crear la regla aplicamos el cambio en el panel de acciones.

Con esta regla de ruteo le decimos a IIS que al momento de recibir una petición para el sitio xxx.jpgarcia.cl sobre escriba la dirección de la petición hacia el sitio localhost en el puerto 80, donde está el sitio XXX en nuestra máquina virtual. Como utilicé la opción Rewrite y no Redirect, necesitamos configurar el proxy de ARR para que así el cliente no sea enviado al otro sitio, sino que el proxy llame al sitio XXX le envié la respuesta el cliente sin que el browser haga nada para esto. Esta es la forma de lograr la trasparencia para el usuario final del sitio XXX.

El proxi se active en el icono Application Request Routing Cache, acción Server Proxy Settings como se muestra en la siguiente imagen.

20

Para activar el proxy, después de seleccionar el Checkbox hacemos click en aplicar del panel de acciones.

Para completar la confiugracion creamos dos reglas más, una para el sitio YYY y otra para ZZZ. Para hacerlo seguimos el mismo procedimiento que usamos para el sitio XXX, con lo cual quedamos con las siguientes tres reglas.

21

Paso 7: Probar

Luego de toda la configuración podemos probar si las reglas están funcionando correctamente. Para eso, simplemente cargamos las 3 URL y obtenemos como resultado que cada requerimiento es respondido de manera trasparente por cada correspondiente sitio de nuestra máquina virtual. Además, podemos probar el sitio Default que sigue funcionando, lo que quiere decir que tenemos 4 Web Sites en la misma máquina virtual, funcionando con sus propios nombres de DNS.

22

Comentarios al cierre

Este es un ejemplo para ilustrar el uso de ARR en este escenario, en producción se puede usar pero hay que utilizarlo en esquema de alta disponibilidad. ARR tiene por diseño la capacidad de trabajar en HA.  Lo mismo pasa con los sitios Web, no es buena práctica tener una sola instancia de un sitio, siempre dos o más!

Links Relacionados

8 pensamientos en “Windows Azure Virtual Machine: múltiples sitios en una VM #windowsazure

  1. GERMAN GOMEZ

    Gracias Juan Pablo, estaba a punto de enviarle un correo para preguntarle nuevamente al respecto, cuando encontre en primera plana la publicacion en su blog.

    Responder
  2. Pingback: Windows Azure Session Affinity en Java/Tomcat con HTTPS/SSL #windowsazure | ..:: Liarjo of Locksley ::..

  3. diego

    excelente articulo, tengo una duda si se puede re4alizar algoa si en azure :
    Poseo 3 sitios web qeu son partes de una misma APP , 1 de esotas esta en aspx, los otros 2 en mvc, y en cojunto es un puro sistema, se puede replicar esto en azure, ya que IIS si se puede, gracias espero tus comentarios.

    Responder
      1. diego

        Soy nuevo en el mundo azure, he leido acerca de los componentes que mencionas, de formqa sencilla cual seria las diferencias entre uno u otra, ademas cuando mencionas lo de “como esten hechas esas aplicaciones”? te comento que las 2 en MVC , una es solamente para el LOG y la otra es funcionala, esta en MVC. FMW 4.5, + Angular + Kendo,

        muchas gracias por tu pronta respuesta .
        saludos,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s