Mass virtual hosts

Hace nos días he tenido la necesidad de configurar Apache para que implemente lo que se denomina mass virtual hosts. Se trata de economizar código en el fichero httpd.conf ante la existencia de muchos virtual hosts con propiedades casi idénticas.
En el caso al que me enfrenté se trataba de configurar muchos virtual hosts en los que lo que cambiaba era el document root y el nombre del host. Supongamos que todos los nombres de host se componen de la siguiente forma host.nombre_usuario y que todos los directorios donde se almacenan los datos web se definen por el camino /datos_web/nombre_usuario. Evidentemente lo que cambia es el nombre de usuario.
Para conseguir implementar esto sin repetir una y otra vez el mismo código para cada virtual host tenemos cuatro opciones:

- Mediante el módulo mod_vhost_alias. La directiva utilizada es VirtualDocumentRoot

- Mediante el módulo mod_rewrite. Las directivas son las propias de este módulo (RewriteCond, RewriteMap, RewriteRule, etc).

- Hacer uso de un módulo externo desarrollado por terceros.

- Armarse de valor y desarrollar un módulo o tocar el código existente de los módulos estandard de Apache.

Reconozco que soy un enamorado del mod_rewrite y lo implementé con éste. Se trata tan solo de crear un virtual host en el que incluyamos el siguiente código (para el ejemplo que hemos propuesto):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^host.(.*)
RewriteRule ^(.*)$ /datos_web/%1$2 [L]

Hay que tener en cuenta que ni mod_vhost_alias ni mod_rewrite establecen el valor de la variable DOCUMENT_ROOT utilizada desde PHP entre otros, pero realmente se puede encontrar solución a esto. Si se trata de una referencia a una página que se compone mediante DOCUMENT_ROOT, la redirección anterior salvará este obstáculo y en otros casos, como por ejemplo includes, podemos hacer uso de una mezcla de recursos utilizando un .htaccess por cada directorio de datos web.

Más info y ejemplos en apache.org

Un comentario en “Mass virtual hosts”

  1. http://serhost.com PR: 0dijo:

    Con virtualdocumentroot puedes usar documentRoot para cada user con un parche en el PHP: http://serhost.com/manuales/lapm.html

Deja tu comentario

XHTML: Puedes usar las etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>