Un host virtual, o VirtualHost, en Apache nos permite mantener múltiples nombres de host en nuestro servidor.

Introducción

El presente manual permite explicar de manera sencilla y concisa cómo crearlos en nuestro servidor local y configurar nuestro sistema operativo para que acepte dichos nombres de host. Muchos de nosotros estamos acostumbrados a trabajar en nuestro servidor web local para nuestros proyectos en modo de prueba o testeo, y por lo generalmente tenemos más de un proyecto en camino, sea laboral (p.e. el web site de un cliente) o personal (p.e. nuestro blog o comunidad virtual). Solemos guardar estos proyectos en carpetas separadas dentro un directorio tal como C:/www/ que sería nuestro directorio raíz web (desde el cual llamamos a nuestro clásico http://localhost ), y llamar a nuestros proyectos de la siguiente manera en nuestro navegador preferido:

http://localhost/tiperu ,

http://localhost/willyblog ,

http://localhost/bazar , entro otros por citar un ejemplo.

En cierto modo podemos trabajar de manera regularmente cómoda, pero quizá desearíamos usar el nombre del dominio real con el que trabajos estos proyectos en la Internet. Así podríamos hacer usar lo siguiente:

http://www.tiperu.com en lugar de http://localhost/tiperu ,

http://willy.tiperu.com en lugar de http://localhost/willyblog , o

http://www.bazarperu.com en lugar de http://localhost/bazar

Y cómo hacemos esto?, pues la respuesta es sencilla, configurando la directiva VirtualHost de nuestro servidor Apache y el archivo host de nuestro Sistema Operativo (Windows o Linux).

Configurando el archivo host

Lo primero que configuraremos será el archivo host de nuestro SO, para Linux lo podemos encontrar en el directorio /etc/ mientras que para Windows XP lo encontramos en C:/Windows/System32/Drivers/etc/. Este archivo lo que hace es asignar direcciones IP a los nombres de host, para que al colocar por ejemplo 127.0.0.1 o localhost en nuestro navegador nos redireccione al mismo contenido. No se sorprenda si encuentra el siguiente par en el archivo host: 127.0.0.1 localhost, dónde el primer valor es nuestra dirección IP local y el segundo el nombre del host.

Lo que haremos ahora es colocar tantas entradas cono deseemos para nuestros proyectos, relacionando la IP local con nuestros nombres de dominio. Para el ejemplo tomaremos las rutas que di anteriormente, las cuales se colocarán debajo del par 127.0.0.1 localhost:

#localhost
127.0.0.1 localhost 
#TIPeru COM SAC (Mi empresa de hosting) 
127.0.0.1 www.tiperu.com 
#Mi blog 
127.0.01 willy.tiperu.com 
#BazarPeru (Tienda Virtual)
127.0.0.1 www.bazarperu.com 

Nótese que he colocado el caracter “#” . Este carácter nos permite ingresar un texto a manera de comentario. Bueno, una vez hechos estos cambios procedemos a guardar el archivo.

Para confirmar su funcionamiento abra su navegador y digite cualquiera de los nombres de host que ha agregado, recuerde de respetar el nombre completo, ya que una entrada del tipo tiperu.com no tendría efecto por carecer del www. que lo antecede.

Si al ingresar el nombre del host le muestra el contenido de su http://localhost significa que la asignación de IP para el nombre de host a tenido efecto. Nótese que aún su nombre de host no apunta a la carpeta en la que se guarda su proyecto. Este punto lo veremos a continuación.

Configurando el archivo httpd.conf del Apache

Ahora configuraremos nuestro servidor Apache para que acepte los nombres de dominio agregados al archivo host y los relacione con las carpetas que albergan los archivos de nuestros proyectos. Para ello abriremos el archivo conf/httpd.conf y nos dirigiremos a la siguiente sección:

# 
# Virtual Hosts 
# 
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations 
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#

Notas:

•  Haga una copia de respaldo de sus archivos de configuración antes de realizar cualquier cambio en ellos.

•  Si no encuentra la sección Virtual Hosts en el archivo httpd.conf quizá lo pueda ubicar en la siguiente ruta conf/extra/httpd-vhosts.conf

Luego procederemos a quitar el comentario de ##NameVirtualHost *:80 dejándolo de la siguiente manera:

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80
#

Esta acción nos permisita trabajar con host virtuales basados en nombres. El * representa un número IP y puede ser reemplazado por uno de ellos si desee. Para el ejemplo déjelo tal y como esta.

Enseguida procederemos a configurar los host virtuales, agregándolos de la siguiente manera:

#localhost
<VirtualHost *:80> 
DocumentRoot "C:/www" 
ServerName localhost:80 
</VirtualHost> 

#TIPeru COM SAC 
<VirtualHost *:80> 
DocumentRoot "C:/wwww/tiperu" 
ServerName www.tiperu.com 
</VirtualHost> 

#Mi Blog 
<VirtualHost *:80> 
ServerAdmin [email protected]
DocumentRoot "C:/wwww/willy" 
ServerName willy.tiperu.com 
</VirtualHost> 
#BazarPeru 
<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot "C:/wwww/bazar" 
ServerName www.bazarperu.com 
</VirtualHost>

Como se puede aprecia cada Virtual Host esta encerrado entre las etiquetas <VirtualHost> y </VirtualHost> que contiene el parámetro *:80 que es NameHostVirtual al cual se refiere. Dentro de estas etiquetas, 2 valores son esenciales para que funcionen correctamente nuestros host virtuales:

•  DocumentRoot. Que es la ruta en la cual se guarda nuestra página web; y

•  ServerName . Que es el nombre del host que previamente agregamos al archivo host de nuestro S.O.

Adicionalmente podemos agregar otros valores, tal como si cada host virtual fuera un host independiente (p.e. ServerAdmin).

Nótese algo muy importante. Si bien localhost es nuestro servidor local por defecto, debemos también agregarlo con un virtual host para que todo trabaje en orden, y debemos agregarle los mismos valores del DocumentRoot y ServerName que posee en su configuración global, de lo contrario no cargará el host.

Finalmente lo que haremos es para el servicio de nuestro servidor Apache y volverlo a inciar. Si tod o esta correctamente configurado podemos cargar en nuestro navegador uno de los nombres de host y ver los resultados (p.e. www.tiperu.com ). Si carga el contenido de la carpeta que le hemos asignado en el <VirtualHost> y no el directorio raiz del localhost quiere decir que todo esta correcto. Felicidades Ud. Ya tiene configurado su host virtual !!!

Agradecimientos

Al equipo de TIPeru COM por su contante apoyo. Y a la Asociación Nacional de Webmaster del Perú ( ANWMP ) por resolver mis dudas e interrogantes mediante sus foros y Chat en línea.

Bibliografía básica en línea

Soporte Apache de hosts virtuales basados en nombre

http://quark.fe.up.pt/ApachES/manual-es/vhosts/name-based.html

Configuración de Apache | Cibernetia

http://www.cibernetia.com/manuales/instalacion_servidor_web/2_3_configuracion_apache.php

Virtual Host examples for common setups

http://quark.fe.up.pt/ApachES/manual-es/vhosts/examples.html