Trabajando con hosts virtuales en Apache

Host virtuales en Apache

Apache puede manejar múltiples host virtuales. Creo que es de las características más importantes en donde ha destacado. Cuando usamos Apache para proyectos de desarrollo tradicionalmente alojamos todos nuestros desarrollos en la carpeta htdocs, que es la que viene por default en la configuración de Apache.

Así tenemos nuestros sitios como:

htdocs/site1
htdocs/site2
...
htdocs/proyecto-1
htdocs/proyecto-n

Y para cada sitio tenemos la siguiente forma de accesarlo

http://localhost/site1
http://localhost/site2
http://localhost/site3
...
http://localhost/proyecto-1
http://localhost/proyecto-n

Pero podríamos accesar a nuestros sitios de la siguiente forma:

http://site1
http://site2

Para ellos tenenos dos formas:

1. Montar un DNS server que se encargue de esa resolución para nuestros sitios
2. Modificar el archivos "hosts" en Windows

Apache se encargará de los demás.

En este pequeño tutorial usaremos Apache 2 y la modificación del archivo "hosts" para tal efecto. Todo esto bajo Windows Vista. Asi he trabajado con algunas cosas que he realizado y puedo cargar mi sitio de pruebas como http://josmx , en vez de cargarlo como http://localhost/josmx

Definir los sitios que usaremos.
Si tenemos varios hosts virtuales podemos definirlos, de todas maneras en cualquier momento podemos modificar esto, anexando o dando de baja un host virtual
Para el ejemplo en este pequeño tutorial usaré tres hosts virtuales:

josmx - mi website
phpMyAdmin - La página de PHPmyadmin, una herramienta para administrar nuestras bases de datos mysql usando una interfaz Web
ejemplos - un sitio donde pongo algunos scripts php para probarlos.

Modificación del archivo hosts
Primero creamos las entradas de nuestrsos host virtuales en el archivo "hosts". Esto para que cuando hagamos una petición al host virtual mediante el navegador o alguna otra herramienta, nuestro equipo sepa donde puede hallar ese host. el archivo host por default viene con la siguiente información.

Nosotros agregaremos las siguientes entradas:

127.0.0.1 josmx virtual
127.0.0.1 phpMyAdmin virtual
127.0.0.1 ejemplos virtual

El archivo hosts está ubicado en

Windows 95/98/Me c:\windows\hosts
Windows NT/2000/XP Pro c:\winnt\system32\drivers\etc\hosts
Windows XP Home c:\windows\system32\drivers\etc\hosts
Windows Vista: C:\Windows\system32\drivers\etc\hosts

Bien, seleccionaremos el menú de inicio, Todos los Programas, Accesorios, Símbolo del sistema y seleccionamos ejecutar como Adminstrador, para que tengamos los permisos necesarios para modificar dicho archivo. Posteriormente nos cmabiamos a la capeta donde se encuentra dicho archivo:

C:\Windows\System32>cd drivers/etc

Abrimos el archivo:

C:\Windows\System32\drivers\etc>edit hosts

El archivo hosts por default en Windows Vista es el siguiente:

Hosts

Agregamos las entradas que mencionamos arriba y guardamos el archivo

Hosts modificado

Configurando Apache

Primero preparamos los directorios donde vamos a ubicar nuestros hosts virtuales. en este caso usaremos

d:\sitios\josmx
d:\sitios\phpmyadmin
d:\sitios\ejemplos

enseguida preparamos un archivo auxiliar en Apache

C:\Apache2.2\conf\extra\httpd-hosts.conf

Este archivo es un archivo de texto y en el definiremos los directorios donde se encontrarán nuestos hosts virtuales. El contenido es el siguiente (usando una configuración estandar de la directiva "Directory" de Apache

<Directory "D:/sitios/josmx">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory "D:/sitios/phpmyadmin">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory "D:/sitios/ejemplos">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Ahora en el archivo C:\Apache2.2\conf\httpd.conf creamos la siguente entrada en la sección de "Supplemental configuration"

# Directorios para hosts virtuales
Include conf/extra/httpd-hosts.conf

Y descomentamos la línea en la misma sección

# Include conf/extra/httpd-vhosts.conf

Para que quede de la siguiente manera:

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

Ahora modificamos el archivo httpd-vhosts.conf, el cual está ubicado en la carpeta extra (C:\Apache2.2\conf\extra)

httpd-vhosts.conf

Este archivo viene con ds ejemplos, los cuales modificaremos para que queden de la siguiente forma:

<VirtualHost *:80>
ServerName localhost
ServerAdmin jos@netlite.org
DocumentRoot "C:/Apache2.2/htdocs"
ErrorLog "D:/sitios/logs/localhost-error.log"
CustomLog "D:/sitios/logs/localhost-access.log" common
</VirtualHost>

<VirtualHost *:80>
ServerName josmx
ServerAdmin jos@netlite.org
DocumentRoot "D:/sitios/josmx"
ErrorLog "D:/sitios/logs/josmx-error.log"
CustomLog "D:/sitios/logs/josmx-access.log" common
</VirtualHost>

<VirtualHost *:80>
ServerName phpmyadmin
ServerAdmin jos@netlite.org
DocumentRoot "D:/sitios/phpmyadmin"
ErrorLog "D:/sitios/logs/phpmyadmin-error.log"
CustomLog "D:/sitios/logs/phpmyadmin-access.log" common
</VirtualHost>

<VirtualHost *:80>
ServerName ejemplos
ServerAdmin jos@netlite.org
DocumentRoot "D:/sitios/ejemplos"
ErrorLog "D:/sitios/logs/ejemplos-error.log"
CustomLog "D:/sitios/logs/ejemplos-access.log" common
</VirtualHost>

Hemos creado además una carpeta de logs y cada sitio virtual tendrá sus propios logs.

Reiniciamos Apache desde a Consola teniendo privilegios de Administrador

C:\Windows\System32\drivers\etc>net stop Apache2.2
El servicio de Apache2.2 está deteniéndose.
El servicio de Apache2.2 se detuvo correctamente.

C:\Windows\System32\drivers\etc>net start Apache2.2
El servicio de Apache2.2 está iniciándose.
El servicio de Apache2.2 se ha iniciado correctamente.

C:\Windows\System32\drivers\etc>

Ejemplo

Para cualquier duda o comentario: http://josmx.com/contacto