Dos paginas web en un mismo servidor – VirtualHost

Apache Server
Apache Server - Logo

En una serie de 4 posts, hemos podido ver Como crear tu propio servidor web.

Ahora imaginemos que lo que necesitamos es tener mas de una web (ya sea blog, foro…etc) en un mismo servidor.

Hacerlo es sencillo si nos ayudamos de una herramienta de Apache, VirtualHost.

VirtualHost es una herramienta que ya hemos visto anteriormente pero que no he explicado en profundidad. Por tanto, quiero explicarlo un poco mas extendido para que podáis hacer un buen uso de esta magnifica herramienta.

Bien, pongámonos en contexto:

Yo tengo una web, https://sakrow.com y quiero tener un blog, https://blog.sakrow.com. Pero mi problema llega con dos cosas. La primera es que solamente tengo un único servidor y router. Ello hace que tenga que tener los puertos (80 en este caso) redirigidos a un único servidor y ademas no puedo usar un Proxy Server porque no tengo una posible segunda maquina.

Bien, entonces solamente queda la opción de tener dos paginas web en una única maquina.

¿Como conseguimos eso? ¡VirtualHost!

¿Que es VirtualHost?

VirtualHost es una configuración de Apache que nos permite diferenciar entre dos dominios y enviar la petición a la carpeta correspondiente, de modo que sakrow.com y blog.sakrow.com puedan estar en la misma maquina (pero en diferentes carpetas). Esto es totalmente transparente para el usuario.

¿Como funciona VirtualHost?

La mejor manera de conocer como funciona es con el ejemplo que hemos tomado antes. Suponemos que tenemos sakrow.com y blog.sakrow.com.

Lo primero es crear sus carpetas individuales en nuestro servidor. Por tanto creamos sakrow y blogsakrow en la carpeta /var/www/

cd /var/www
mkdir sakrow
mkdir blogsakrow

De esta manera ya están creadas las dos carpetas. Ahora creemos un index.html para cada carpeta. De modo que mas tarde le digamos al Apache que lea el index.html de cada carpeta.

Una vez creado nos vamos a la carpeta /etc/apache2/sites-available/ en esta carpeta nos encontramos con los sitio posibles en nuestro servidor. Estos sitios son de lo que estamos hablando, las posibles web que puede servir Apache.

Por defecto estará 000-default, pero nosotros vamos a crear dos nuevos archivos, sakrow y blogsakrow.

Cuidado:

Estos archivos no deben tener extensión, por lo que tenéis que tener cuidado al crearlos, nunca les pongáis una extensión.

Una vez creados, tenemos que escribir lo siguiente:

En sakrow:

#Web de sakrow
<VirtualHost *:80>
ServerName 192.168.10.100
ServerAlias sakrow.com
DocumentRoot /var/www/sakrow
DirectoryIndex index.html
ServerAdmin contacto@sakrow.com
</VirtualHost>

En sakrowblog:

#Blog de sakrow
<VirtualHost *:80>
ServerName 192.168.10.100
ServerAlias blog.sakrow.com
DocumentRoot /var/www/sakrowblog
DirectoryIndex index.html
ServerAdmin contacto@sakrow.com
</VirtualHost>

De este modo lo que le decimos con cada cosa es:

  • Servername:  IP del servidor que tiene la pagina web, en este caso como no tenemos ningún tipo de DNS, tenemos que poner la IP propia de nuestro ordenador, podéis verla con el comando ifconfig.
  • ServerAlias: nombre sobre el que se identificara esa web, si ponemos www.sakrow.com como en este caso, y luego le hacemos una petición de sakrow.com, no nos servirá esta web, porque le hemos dicho que responda a la petición de www.sakrow.com, por ello se suele duplicar esta entrada y poner las dos opciones.
  • DocumentRoot: ruta en la que podemos encontrar la carpeta que contiene la informacion de la web. Como recordareis hemos creado dos carpetas sakrow y blogsakrow. Aquí es donde las definiremos.
  • DirectoryIndex: aqui en donde hacemos uso del index.html que hemos creado anteriormente. Es donde le decimos a Apache cual es la primera pagina que tiene que cargar.
  • ServerAdmin: si por alguna cosa da un error Apache y no muestra la pagina,  dentro del error aparecerá el correo electrónico que pongáis aquí, de modo que puedan contactar con vosotros.
Evidentemente si nos equivocamos de carpeta en DocumentRoot, no encontrara el index.php o sera el de otra carpeta.

Una vez guardados los cambios, tenemos que activar los dos sitios, ya que le tenemos que decir de alguna manera a Apache, que existen dos sitios diferentes, primero activarlos y luego reiniciando Apache.

Para activar un sitio se usa en comando a2ensite misitio donde misitio es el nombre del archivo que hemos creado, por tanto:

a2ensite sakrow
a2ensite sakrowblog

Ahora ya tenemos activados las dos webs y reiniciamos Apache:

/etc/init.d/apache2 restart

Y con esto ya podemos acceder a nuestras dos paginas web. Eel proceso se puede repetir con tantas paginas como vosotros queráis, de manera que se pueden almacenar todas las webs que se quieran en un solo servidor.

Si queremos acceder desde la red LAN a esas dos paginas, tenemos que modificar el archivos hosts de nuestro terminal

En este caso:
sakrow.com 192.168.10.100
blog.sakrow.com 192.168.10.100