Con el httpd.conf ya visto para sentencia pasamos a crear los hosts virtuales propiamente dichos. Sobre los hosts hemos hablando en el post anterior llamado “Los hosts y las DNS”.
Con los hosts virtuales lo que pretendemos es que el Apache tome conciencia de que tiene alojados en él diversos sitios web a los que accederemos mediante su nombre de dominio.
Cuando pedimos una página web desde nuestro navegador tecleando su URL en la barra de direcciones, lo primero que ocurre es que el navegador contacta con nuestro sistema operativo y le pregunta si sabe a qué IP corresponde el nombre introducido. Todos los sistemas operativos contienen una lista de hosts con la dirección IP y el nombre del dominio y normalmente sólo tienen la dirección 127.0.0.1, llamada de loopback, y de dominio tienen localhost (es decir, la misma máquina desde la que estás). A ella podemos agregarle las que queramos pero normalmente sería una tontería tener que introducir la dirección y nombre de cada web que queramos visitar. Es mucho más cómodo el sistema DNS para dichos menesteres.
Todas las interfaces de red (tu tarjeta de red o tarjeta wi-fi integrada en el portátil con la que te conectas a tu router) tienen parámetros configurables. A menudo las vemos en “Automático”. Esto significa que mediante unos protocolos integrados en el sistema operativo la tarjeta y el router se comunican y normalmente el router establece qué dirección ip tiene dicha tarjeta, a qué servidores de DNS se conectará para resolver nombres de dominio, etc…
Ahora viene el problema que nos afecta: Imagínate que en internet ya existe www.misuperweb.com. Puede ser tuya o no, pero tú quieres usar ese nombre para las pruebas en tu pc. Los servidores de DNS de internet saben que dicho nombre apunta a la dirección IP del servidor donde está alojada dicha página, que evidentemente no es tu ordenador de casa. Entonces si tu tecleas www.misuperweb.com te carga la de internet y no la tuya.
Esto lo solucionamos mediante los hosts virtuales. Le vamos a decir a nuestro Apache que esa web la tiene el y nos la debe servir. Pero para que nuestro sistema operativo la busque en nuestra máquina primero y no en internet podemos hacer dos cosas:
- Montarnos un servidor de DNS propio y decirle que resuelva a localhost todas las peticiones que hagamos a nuestros sitios (esto lo haremos si tenemos una LAN en la casa/oficina y el Apache está en otra máquina distinta a aquella desde la cual intentamos acceder). Esto requiere además modificar en el sistema operativo las opciones del DNS para nuestra tarjeta de red, e indicarle que las DNS no serán automáticas, sino que deberá conectar a la máquina de la red en la que hayamos montado el servidor de DNS.
- Modificar el archivo hosts, que es lo que vamos a hacer. En Windows7 lo tenemos en C:\Windows\System32\drivers\etc y se llama hosts. Lo puedes abrir con el Notepad++. Para modificarlo deberás abrirlo como administrador ya que está en una ruta protegida del sistema operativo. Esto nos permitirá configurarlo de manera que cuando alguien le pida por misuperweb.com él sepa que está en nuestra máquina (que es donde está el Apache) y así no se irá a buscarla en internet mediante DNS.
Añadiremos a dicho archivo al final en una nueva línea 127.0.0.1 misuperweb.com y guardamos. Repetiremos el proceso para todos los dominios que queramos añadir. La IP siempre será la misma (127.0.0.1). Para que los cambios surjan efecto es necesario reiniciar el Windows.
Muy bien, ahora nuestro sistema ya sabe que no tiene que usar las DNS y que cuando le pregunten desde un navegador por misuperweb.com tiene que preguntarse a sí mismo (que es donde está el Apache escuchando gracias al Listen80 que vimos en el anterior artículo).
Los hosts virtuales se configuran en C:\xampp\apache\conf\extra y el fichero se llama httpd-vhosts.conf.¡ Vamos a por ellos!
- El primer paso es crear una carpeta en el disco donde alojaremos nuestros hosts virtuales. Para evitar problemas la crearé en la raíz del disco duro y la llamaré vHosts (C:\vHosts). Dentro de ella habrá una carpeta para cada host virtual (c:\vHosts\misuperweb\)
- El segundo paso es configurar el httpd-vhosts.conf.
Al principio del fichero, en cualquier espacio en blanco, añade lo siguiente para configurar los permisos de la carpeta:
<Directory C:/vHosts>
Order Deny,Allow
Allow from all
</Directory>
Descomenta en caso de que sea necesario la línea que pone NameVirtualHost *.80
Ahora, al final del documento añade las siguientes líneas:
<VirtualHost *:80>
ServerAdmin tu@email.com
DocumentRoot “C:/xampp/htdocs”
ServerName localhost
ErrorLog “logs/localhost.log”
CustomLog “logs/localhost.log” combined
</VirtualHost>
<VirtualHost *:80>
ServerAdmin tu_otro@email.com
DocumentRoot “C:/vHosts/misuperweb”
ServerName misuperweb.com
ErrorLog “logs/misuperweb.log”
CustomLog “logs/misuperweb.log” combined
</VirtualHost>
En el primer VirtualHost hemos definido los datos para localhost. Ten en cuenta que si alguien solicita al Apache una web que no consta en la lista como host virtual éste le devolverá el predeterminado (localhost en este ejemplo). En el segundo los propios para misuperweb.
Sólo son obligatorios el DocumentRoot y el ServerName.
Guarda el fichero.
En caso de tener otro dominio crearíamos otra <VirtualHost *:80> con todos los datos, y añadiríamos al fichero hosts del Windows los datos correspondientes (o añadiríamos el registro DNS para el nuevo host si estamos empleando servidor propio de DNS).
Desde el icono del xampp que aparece en la bandeja del Windows (donde el reloj y demás iconos) abrimos el gestor del xampp y detenemos el servidor Apache haciendo clic en su correspondiente botón. Pasados unos segundos hacemos clic en Start.
Y ahora la prueba de fuego:
En nuestro navegador, si introducimos como dirección localhost nos aparecerá la ventana principal del xampp (como era previsible, todo OK) y si tecleamos misuperweb.com nos abrirá nuestro proyecto satisfactoriamente.
Y con ello finalizamos nuestra breve serie de artículos.
Cualquier comentario constructivo, duda, etcétera será bien recibida J
Inspirado en http://foundationphp.com/tutorials/apache22_vhosts.php



