Personal tools
You are here: Home Documentación Recetas Servidores Virtuales en Apache
Navigation
Log in


Forgot your password?
New user?
 
Document Actions

Servidores Virtuales en Apache

by Lorenzo Gil Sanchez last modified 08-12-2004 01:49 AM

Copyleft © 29 de Octubre de 2004 por Miguel Hernández Martos (enlavin)

Qué son los sitios web virtuales

Los sitios web virtuales nos permiten tener varios sitios webs independientes dentro de la misma máquina sin tener que lanzar varias instancias de Apache. Así podemos optimizar recursos.

Hay fundamentalmente dos formas de definir sitios virtuales:

  • Por IP: se identifica a cada servidor por una IP diferente.
  • Por nombre: el servidor web escucha peticiones en una única IP y es el nombre de la página en que define qué contenido se va a mostrar.

Voy a explicar esta última forma que es la más sencilla y la que más habitualmente me he encontrado. Los ejemplos los he sacado de debian. En otras distribuciones es posible que los ficheros de configuración de apache estén en otro sitio y/o estén más modularizados. También se pueden definir sitios virtuales utilizando otros puertos (por ejemplo para sitios https) y mezclando identificación por IP y por nombre, pero eso otra historia y deberá ser contada en otra ocasión.

Estructura de cada sitio virtual

Cuando configuro apache para tener sitios virtuales siempre intento mantener una estructura coherente entre los diferentes sitios para que luego sea sencillo encontrar las cosas. Supongamos que los sitios virtuales se almacenan en:

  • /mnt/sites/sitio1.com
    • html aqui se guardan las páginas y los scripts php
    • cgi-bin aqui irán los cgi propios del sitio
    • include siempre creo un include por encima de html para colocar librerías y otros scripts de php que conviene apartarlos por si falla la configuración de apache. De esa forma podemos poner contraseñas o información delicada y hay menos riesgo de que sea vista por una mala configuración del servidor web.

Configurando Apache

Editamos /etc/apache/httpd.conf y nos vamos al final del fichero. Primero se definen los permisos de ejecución para los directorios cgi-bin de cada sitio virtual:

     <Directory /mnt/sites/*/cgi-bin/>
         AllowOverride None
         Options ExecCGI
         Order allow,deny
         Allow from all
     </Directory>

El siguiente paso es decirle a Apache que escuche en el puerto 80 de cualquier IP y que distinga los sitios virtuales por nombre:

     NameVirtualHost *:80

Ahora viene el meollo del asunto. Para cada sitio virtual que vayamos a definir tenemos que especificar su nombre, los directorios donde están los scripts y todas esas cosas. Todas las configuraciones que se establezcan entre las marcas <VirtualHost>...</VirtualHost> son únicas de ese sitio y sobreescriben a las predeterminadas de Apache:

     <VirtualHost *:80>
         # Importante! Esto define el nombre del sitio y lo identifica
         ServerName www.sitio1.com
         # El sitio puede ser accedido por otros nombres además del primario
         ServerAlias sitio1.com
         ServerAdmin webmaster@sitio1.com        
         # Directorio para cgi
         ScriptAlias /cgi-bin/ /mnt/sites/sitio1.com/cgi-bin/        
         # Raiz para las páginas y scripts PHP
         DocumentRoot /mnt/sites/site1.com/html/        
         # Se pueden personalizar los ficheros log para cada sitio
         ErrorLog /var/log/apache/host.site1.com-error.log
         CustomLog /var/log/apache/host.site1.com-access.log common        
         # Manejadores de error. No son necesarios pero dan un toque más serio a la web
         ErrorDocument 404 /error/404.php
         ErrorDocument 401 /error/401.php
         # Configuración de la ruta de búsqueda para PHP. Cada sitio virtual puede tener
         # un include_path independiente.
         php_value "include_path" ".:/mnt/sites/sitio1.com/include"
         # nota: esto ultimo a veces da problemas según qué versiones de PHP. Caso de encontrarnos con 
         # problemas de este tipo lo mejor es definir el "include_path" en el fichero 
         # /mnt/sites/sitio1.com/html/.htaccess
     </VirtualHost>

Este sitio puede accederse desde un navegador al solicitar www.sitio1.com o sitio1.com. Si se quiere otro sitio, pues otra marca <VirtualHost> :

     <VirtualHost *:80>
         ServerName www.sitio2.com
         ServerAlias sitio2.com gcubo.org
         ServerAdmin webmaster@sitio2.com
         ScriptAlias /cgi-bin/ /mnt/sites/sitio2.com/cgi-bin/
         DocumentRoot /mnt/sites/site2.com/html/
         ErrorLog /var/log/apache/host.site1.com-error.log
         CustomLog /var/log/apache/host.site1.com-access.log common       
         php_value "include_path" ".:/usr/share/pear:/mnt/sites/sitio2.com/include"
     </VirtualHost>

Y así con todos los sitios que se necesiten. El segundo sitio podría ser llamado como www.sitio1.com, sitio2.com o gcubo.org desde un navegador.

Es relativamente simple automatizar la creación de sitios virtuales para una máquina que tenga que servir muchos de ellos. Se puede crear un directorio /etc/apache/vhosts y hacer un fichero por sitio virtual. Luego en la configuración de Apache se haría:

     ##-- vhosts --##
     Include vhosts/sitio1.com.conf
     Include vhosts/sitio2.com.conf
     (...)
     ##-- eovhosts --##

Formato que es simple de modificar mediante scripts.

Para probar la configuración sin necesidad de tener nombres de dominio de verdad podemos añadir entradas en el fichero /etc/hosts de la máquina donde se ejecute el navegador (o c:\windows\system32\drivers\etc\hosts si es windows):

     192.168.1.80 sitio1.com www.sitio1.com sitio2.com www.sitio2.com

Suponiendo claro que esa es la IP del servidor web de pruebas.

Pues ya está. Eso es to, eso es to, eso es todo amigos!


Powered by Plone CMS, the Open Source Content Management System Powered by GCubo Powered by Cicode

This site conforms to the following standards: