VirtualHosts locales en Apache para Windows

VirtualHosts locales en Apache para Windows

Cuando nuestro servidor Físico local no cuenta con mas de un IP por tarjeta, y se quiere tener varias aplicaciones ejecutandose en un mismo Servidor, entonces la solución es asociar el IP de la PC Física a más de un nombre DNS y luego crear los VirtualHosts para cada aplicación en el archivo httpd-vhosts.conf de Apache.

Estos VirtualHost son como Servidores Apache cada uno con su propio nombre, puerto y otras propiedades tal cual los tiene un Servidor Apache “Real”.

Se deberá establecer los VirtualHost básicamente en 3 pasos generales :
1. Configurar httpd.conf de Apache (una ubicacion usual es c:\\apache\\conf).
2. Crear los VirtualHosts en httpd-vhosts.conf de Apache (una ubicacion usual es c:\\apache\\conf\\extra).
3. Crear un DNS para cada VirtualHost en el archivo host de Windows (“c:\\windows\\system32\\drivers\\etc\\hosts”).

Para activar el uso de VirtualHosts y en caso de usar Apache 2.2.X, se comezará por:

Windows XP

1. En httpd.conf descomentar la sgte linea :

Include conf/extra/httpd-vhosts.conf

para usar el archivo de virtual hosts en httpd-vhosts.conf (ubicado en c:\\apache\\conf\\extra).

2.1 Para crear un VirtualHost, en httpd-vhosts.conf , agregar al inicio o en la zona de NameVirtualHosts :

NameVirtualHost *:80

Esto indica que todas las peticiones hechas al puerto 80 van hacia los VirtualHosts.

2.2 En httpd-vhosts.conf agregar por cada VirtualHost :

<VirtualHost *:80>
   DocumentRoot "C:/Apache/htdocs/dirmyvirtualhost1/public"
   ServerName myvirtualhost1.localhost
   ServerAlias www.myvirtualhost1.localhost

   # This should be omitted in the production environment
   SetEnv APPLICATION_ENV development

   <Directory "C:/Apache/htdocs/dirmyvirtualhost1/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
   ErrorLog "C:/apache/htdocs/dirmyvirtualhost1/logs/myvirtualhost1-error.log"
   CustomLog "C:/apache/htdocs/dirmyvirtualhost1/logs/myvirtualhost1-access.log" common

</VirtualHost>

El formato de ServerName y ServerAlias apuntan a un subdominio, pero si queremos podemos usar un dominio simple.
ServerAlias es necesario porque evita que algún componente que resuelve el nombre del Servidor se tome el trabajo de buscar “fuera” un servidor con el nombre que hemos definido para nuestro VirtualHost en nuestro Servidor Apache Local.
Con respecto a los archivos de log : localhost-error.log y localhost-access.log es necesario saber que son útiles, porque guardaran los errores y accesos relativos a nuestro VirtualHost separados del resto de VirtualHost. Lo unico que tenemos que hacer es tener creado un directorio para tal fin, en este caso es logs, y automáticamente Apache creará el archivo si no está aún y lo actualizará cada vez que suceda un error o un acceso GET o POST.
Si tuvieramos solo los dos archivos para todos los VirtualHosts, los errores se mezclarian y harian difícil encontrar un error.
Podriamos guardarlos con este formato para cada VirtualHost <MyVirtualHost>-error.log y <MyVirtualHost>-access.log, para identificarlos más rápidamente.

3. Abrir “c:\\windows\\system32\\drivers\\etc\\hosts”
Agregar una nueva línea con el sgte formato:

127.0.0.1 "espacio" ServerName

ServerName es el mismo de la instrucción ServerName en el VirtualHost creado en httpd-vhosts.conf.

127.0.0.1 localhost
127.0.0.1  myvirtualhost1.localhost

Reiniciar el equipo.

Windows 7

Solo ejecutar el mismo paso 1 que para Windows XP.

1. Modificar la instrucción Listen en httpd.conf.

#Listen 80
#por
Listen 0.0.0.0:80

Debido a que Windows7 solo permite un localhost x PC física, haciendo imposible usar más de un 127.0.0.1, con este cambio se habilita a Apache el uso de IPv6 y la posibilidad de usar los VirtualHosts.

2.1 Para crear un VirtualHost, en httpd-vhosts.conf , agregar al inicio o en la zona de NameVirtualHosts :

NameVirtualHost 127.0.0.1:80

Notar que NameVirtualHost esta en formato IPv6, por ello además debemos reemplazar este formato en otros VirtualHost que vayamos a crear.

2.2 Tambien debemos tener un VirtualHost para localhost, porque como ya se explicó Windows7 sólo permite un localhost x PC física, así que lo creamos con estas instrucciones en httpd-vhosts.conf.

<VirtualHost 127.0.0.1:80>
   DocumentRoot "C:/Apache/htdocs"
   ServerName localhost
   ServerAlias   localhost
   <Directory "C:/Apache/htdocs/">   
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
   ErrorLog "C:/apache/logs/localhost-error.log"
   CustomLog "C:/apache/logs/localhost-access.log" common

</VirtualHost>

Notar que en <VirtualHost> se usa 127.0.0.1:80 en vez de *:80 como se hace en XP en el respectivo <VirtualHost>.
En este caso se tiene AllowOverride All.
Con respecto a los archivos de log : localhost-error.log y localhost-access.log es necesario saber que son útiles, porque guardaran los errores y accesos relativos a nuestro VirtualHost separados del resto de VirtualHost. Lo unico que tenemos que hacer es tener creado un directorio para tal fin, en este caso es logs, y automáticamente Apache creara el archivo si no esta aún y lo actualizará cada vez que suceda un error o un acceso GET o POST.
Si tuvieramos solo los dos archivos para todos los VirtualHosts, los errores se mezclarian y harian difícil encontrar un error.
Podriamos guardarlos con este formato para cada VirtualHost <MyVirtualHost>-error.log y <MyVirtualHost>-access.log, para identificarlos más rápidamente.

2.3. Es recomendable que la instrucción ServerName en httpd.conf no sea la misma que el Nombre de nuestra Pc física ( por ejemplo pc-casa, pc-oficina), porque este es retornado al cliente (browser) haciendo posible disminuir el nivel de seguridad.
Este cambio deberá hacerse en el VirtualHost de localhost :

2.4. Para crear unl VirtualHost lo agregamos a continuación del VirtualHost del localhost :

<VirtualHost 127.0.0.1:80>
   DocumentRoot "C:/Apache/htdocs/dirmyvirtualhost1"
   ServerName myvirtualhost1.localhost
   ServerAlias   www.myvirtualhost1.localhost
   <Directory "C:/Apache/htdocs/dirmyvirtualhost1">   
       Options Indexes MultiViews FollowSymLinks
       AllowOverride none
       Order allow,deny
       Allow from all
   </Directory>
	ErrorLog "C:/apache/htdocs/dirmyvirtualhost1/logs/myvirtualhost1-error.log"
	CustomLog "C:/apache/htdocs/dirmyvirtualhost1/logs/myvirtualhost1-access.log" common

</VirtualHost>

En este caso se tiene AllowOverride none.
Con respecto a los archivos de log : localhost-error.log y localhost-access.log es necesario saber que son útiles, porque guardaran los errores y accesos a nuestro VirtualHost separados del resto de VirtualHost. Lo unico que tenemos que hacer es tener creado un directorio para tal fin, en este caso es logs, y automáticamente Apache creara el archivo cada vez que suceda un error o un acceso GET o POST.
Si tuvieramos solo los dos archivos para todos los VirtualHosts, los errores se mezclarian y harian difícil encontrar un error.
Podriamos guardarlos con este formato para cada VirtualHost <MyVirtualHost>-error.log y <MyVirtualHost>-access.log, para identificarlos más rápidamente.

3. Una vez creados los VirtualHost debemos asignarles un nombre DNS, para eso sugiero abrir el Notepad u otro editor con derechos de Administrador e ingresar o copiar la ruta del archivo hosts (c:\\windows\\system32\\drivers\\etc\\hosts) en el nombre de archivo a abrir , porque debido a que hosts esta oculto (por seguridad) no podremos acceder a este de como se hace en XP.

Como se tiene un VirtualHost con ServerName myvirtualhost1.localhost, entonces se deberá tener entradas como en las líneas 3 y 4, notar que localhost ya esta descomentado, con sus respectivos IP en formato IPv4 e IPv6.
Los ::1 representan el mismo IP 127.0.0.1 pero en formato IPv6. Esto es necesario en Windows 7 porque trae por defecto activado el uso de IPv6 para representar una direccion de Host.
Desconozco el mecanismo que usa para usar uno u otro, pero es mejor poner los dos IPv4 e IPv6 por si las moscas.

127.0.0.1 localhost
::1 localhost
127.0.0.1 myvirtualhost1.localhost
::1 myvirtualhost1.localhost

Reiniciar el equipo.

A veces en Windows 7 se produce error cuando intentamos acceder a un Sitio virtual, mostrando la pantalla de destino inaccesible. Una solución es detener el Servicio de Windows Cliente DNS ó DNS Client en Inglés.
Aunque esto se deba a algún error de configuración de PHP , se produce el mismo error cuando se usa una aplicación web que use BD y este Servicio está detenido, por lo que se debe hacer lo contrario , es decir Iniciarlo.

Anuncios

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