Mon, 2011/06/13 - 15:44

Primero ¿Qué es un virtual host?

El termino de virtual host se refiere a la practica de instalar mas de un website — como www.example.com y www.example2.com — en una simple maquina.

Después de aclarar que en un virtual host empezaremos a la introducción practica de como configurar múltiples sitios — gracias a la idea que me dio un comentario en setup a webserver centos 5.5. Desde el típico localhost hasta mysite.tld, mysecondsite.tld, blog.mysite.tld

¿Qué soporta virtual host? (en sus siglas en ingles).

  • Name-based Virtual Hosts (más de un sitio web por una dirección IP)
  • IP-based Virtual Host (una dirección IP por cada sitio web)
  • File Descriptor limits (o, muchos ficheros de logs)
  • Dynamically configured Mass Virtual hosting (configuración dinámica de virtual hosts)

Como he comentado anteriormente trataremos de forma practica las distintas caractéristicas.

NOTA: Para realizar un debug de la configuración de los virtual hosts buscamos el apache y usamos la opción -S

/usr/local/apache2/bin/httpd -S

IP-based Virtual Hosts.

Los requerimientos son simples, el servidor tiene que tener diferentes direcciones IP por cada virtual hosts. Esto se puede realizar mediante tarjetas físicas o el sistema operativo puede realizar una virtualización de redes para obtener distintas IP.

Para configurar el IP-based puede hacerse de dos formas. Cada demonio de un httpd se encarga de un solo hostname ó corriendo un simple demonio de httpd que soporte todos los virtual hosts.

¿cuando usarlos?.

  • Múltiples demonios cuando:
    • Seguridad de partición y privacidad. Puede darse el caso de que la compañía 1 no quiera que la compañía 2 lea su sistema de fichero. Cada demonio corre en diferentes grupos de usuarios para tratar la privacidad de lectura y escritura.
  • Simples demonios cuando:
    • Compartir la configuración entre distintos virtual hosts no representa ningún problema de privacidad.
    • La maquina tiene un alto número de peticiones y el performance se ve afectado, separar los demonios no es la mejor opción.

Parte practica.

NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40

<VirtualHost 192.168.1.1 172.20.30.40>
DocumentRoot /www/server1
ServerName server.example.com
Serveralias server
</VirtualHost>

Repaso de la configuracion.

  • DocumentRoot: Se refiere en donde se va a encontrar el sitio web. los ficheros e images etc …

Otro ejemplo de como puede configurar un sitio de producción y de testing puede ser en el puerto por defecto en el 80 se encuentre producción y en el 8080 testing.

Listen 80
Listen 8080

NameVirtualHost 127.0.0.1:80
NameVirtualHost 127.0.0.1:8080

<VirtualHost 127.0.0.1:80>
ServerName www.example.com
DocumentRoot /www/domain-deploy
</VirtualHost>

<VirtualHost 127.0.0.1:8080>
ServerName www.example.com
ServerName /www/domain-staging
</VirtualHost

Named-based

A la hora de ejecutar un Named-based para la configuración para un simple IP tiene que ser tratados co nlnos aliases (CNAMES) en DNS. Es necesario tener los nombre de los sitios en DNS servers para resolver la IP si no nadie sera capaz de visualizar el sitio. En caso contrario los ficheros hosts puede realizar la magia.

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.domain.tld
Serveralias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *:80>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost

Existe una forma para tener de forma flexible los virtual host de forma dinamica en este post flexible apache configuration for reusable development environments se puede encontrar un ejemplo de como realizar configuraciones flexibles.