Cómo tener varios sitios web en el mismo servidor web Apache. Usaremos VirtualHost de Apache. Como sistema operativo usaremos Linux Ubuntu 12.04. Aunque lo explicado en este artículo sirve para otras versiones de Ubuntu y para otras distribuciones de Linux.

Definición VirtualHost de Apache

La tecnología Virtual Host de Apache sirve para poder publicar más de un sitio web en un mismo servidor web con Apache. Incluso podremos aplicar diferentes configuraciones a cada sitio web (host virtual).

Cuando se realiza una petición al servidor web, Apache identificará a qué site (host virtual) ha de asignarla. Apache puede identificar el sitio web de destino en el servidor (site) en base a tres posibles factores: IP, host name (nombre del sitio) o bien por el puerto.

En este tutorial usaremos el método host name, dado que realizaremos la configuración para dos sitios web reales: comunidadbiker.com y electrojj.com. En el hosting donde tenemos registrados los dominios, estableceremos las zonas DNS apuntando a la IP pública donde esté ubicado nuestro servidor web, tal como indicamos aquí.

Requisitos para tener varios sitios web en un mismo servidor Apache en Linux

Servidor web con Apache en Linux

En primer lugar necesitaremos disponer de un servidor con Linux y Apache. En nuestro sitio web tenemos numerosos artículos explicando cómo montar un servidor web Apache en Linux. Alguno de ellos:

Por supuesto necesitaremos acceso al servidor web Linux con un usuario con permisos suficientes para acceder a las carpetas de configuración de Apache y de los sitios web.

Configurar zonas DNS en hosting de dominio para sitios web reales

En nuestro caso montaremos dos sitios web reales y públicos, por ello deberemos configurar, en nuestro panel de control del dominio (de nuestro hosting), las zonas DNS. Si vamos a montar el servidor web con sitios reales de acceso público deberemos tener acceso al panel de control del hosting donde tengamos registrado el dominio.

Deberemos conocer la dirección IP pública de la ubicación del servidor web Apache. Será la que añadamos en las zonas DNS del dominio. Para obtener la IP pública podemos acceder a la gestión del router de nuestra red, y en Información y diagnóstico suele aparecer esta IP pública:

Configurar zonas DNS en hosting de dominio para sitios web reales

La IP pública debe ser estática, si es dinámica y varía, como es lógico, tendremos que ir cambiándola en la zona DNS cada vez que varíe. O bien usar alguna utilidad de nuestro hosting que admita cambiar la IP en la zona DNS cada vez que cambie en nuestra ubicación.

Desde el panel de control del dominio, en Zonas DNS, añadiremos una zona de tipo A, con host «www», con la IP obtenida en el paso anterior:

Configurar zonas DNS en hosting de dominio para sitios web reales

Este proceso lo realizaremos cuando queramos que los sitios web sean accesibles públicamente. Mientras estamos en modo depuración y desarrollo del sitio no es recomendable hacerlas públicas, mejor esperar a que estén al 100% operativas.

Repetiríamos el proceso anterior para cada web que queramos hacer pública, siempre con la misma IP pública, ya que todos los sitios web irán redireccionados a la misma IP pública, al mismo servidor.

NAT en router o cortafuegos de la organización

Con la zona DNS anterior conseguiremos que todo el tráfico http de cada sitio web vaya hacia la IP pública indicada. Ahora lo que haremos será, ya en la infraestructura de red de la organización/empres/casa, será hacer un NAT (una traslación de direcciones, un mapeo de puertos o una redirección de puertos), de forma que todo el tráfico que llegue al router o cortafuegos que tengamos, vaya encaminado a una IP, que será la IP de nuestro servidor web Apache con Linux Ubuntu. Por ello, antes de hacer el NAT, debemos conocer la IP de la LAN del servidor de Ubuntu, podemos obtenerla con el comando:

ifconfig

En nuestro caso la 192.168.1.6:

NAT en router o cortafuegos de la organización

Crearemos una regla en el router o cortafuegos, en la sección NAT, que redirija todo el tráfico http (puerto 80) a la IP del servidor web Apache:

NAT en router o cortafuegos de la organización

Ubicación de los ficheros de los sitios web en el servidor

Cada sitio web de nuestro servidor tendrá una carpeta asignada. Habitualmente suelen colocarse en:

/var/www

Aunque, como es lógico, pueden ponerse en cualquier ubicación.

Por lo tanto, para cada sitio web, tendremos una carpeta dentro de /var/www, por ejemplo:

Ubicación de los ficheros de los sitios web en el servidor

Ficheros de configuración de Apache en Linux

Antes de realizar cambios, indicamos de forma resumida dónde están los ficheros de configuración de Apache, habitualmente se encuentran en la carpeta:

/var/apache2

o bien en esta otra carpeta:

/etc/apache2

Dependerá de la distribución de Linux y de la versión de Apache que tengamos instalada.

El fichero de configuración principal de Apache es: apache2.conf en las versiones nuevas de Apache, en las anteriores era httpd.conf.

Por lo tanto, la configuración principal de Apache, para una distribución Linux Ubuntu, se encuentra en:

/etc/apache2/apache2.conf

Este fichero tendrá una línea indicando que se incluyan los ficheros ubicados /etc/apache2/sites-enabled:

Include sites-enabled/

Ficheros de configuración de Apache en Linux

Los archivos de configuración para los virtual hosts, que serán los que modifiquemos o creemos nuevos, se encuentran dentro de dos carpetas:

  • /etc/apache2/sites-available: aquí se ubicarán todos los archivos de configuración de los host virtuales, cada host se corresponderá con un archivo.
  • /etc/apache2/sites-enabled: aquí se ubicarán los enlaces simbólicos a los archivos de la carpeta anterior, sites-available, para los host que queramos activar en cada momento.

Con la instalación de Apache, en una distribución Linux Ubuntu, se crean por defecto el archivo /etc/apache2/sites-available/000-default (en algunas versiones /etc/apache2/sites-available/default) y su correspondiente enlace simbólico /etc/apache2/sites-enabled/000-default (o bien /etc/apache2/sites-enabled/default). Estos dos ficheros nos servirán de ejemplo para montar posteriormente nuestra estructura para los dos sitios web que alojaremos en el mismo servidor Apache.

El contenido del fichero de ejemplo por defecto de virtual host de Apache2 en Linux Ubuntu /etc/apache2/sites-enabled/000-default es:

Configurar Apache para permitir varios sitios web en un mismo servidor Linux Ubuntu

Crearemos cada ficheros de configuración de cada sitio web. Para ello abriremos una ventana de terminal de línea de comandos en nuestro equipo Linux Ubuntu. Podremos usar el fichero que suele venir por defecto, como base, que suele estar en:

/etc/apache2/sites-available

Por ello accederemos a esta carpeta con el comando:

cd /etc/apache2/sites-available/

Y suele tener el nombre default o 000-default.conf (según la versión de Apache y la distribución de Linux). Haremos una copia de este fichero en el fichero resultante para nuestro sitio web. En nuestro caso, para el sitio web «comunidadbiker.com», ejecutaremos:

cp default comunidadbiker.com.conf

Editaremos el fichero creado comunidadbiker.com.conf con:

nano comunidadbiker.com.conf

Configurar Apache para permitir varios sitios web en un mismo servidor Linux Ubuntu

Y modificaremos ServerName y ServerAlias por la página web que queramos redireccionar, en nuestro caso «comunidadbiker.com» y «www.comunidadbiker.com» respectivamente. También modificaremos las líneas que hagan referencia a la carpeta /var/www por la carpeta donde tengamos los ficheros de nuestro sitio web, en nuestro caso /var/www/comunidadbiker:

Configurar Apache para permitir varios sitios web en un mismo servidor Linux Ubuntu

El fichero configurado para el sitio comunidadbiker.com (con carpeta /var/www/comunidadbiker) y para el puerto 80, quedará:

El fichero anterior es un ejemplo para un sitio web con acceso por el puerto estándar 80. Podremos modificarlo para establecer la configuración personalizada para el sitio web que estamos configurando.

Guardaremos los cambios pulsando en «Control + O» y cerraremos la edición pulsando en «Control + W».

Una vez creado el fichero en la carpeta /etc/apache2/sites-available , para activarlo, deberemos crear un enlace simbólico a este fichero en /etc/apache2/sites-enable, para ello podremos ejecutar el siguiente comando:

aa2ensite comunidadbiker.com.conf

Que nos devolverá el mensaje:

Enabling site comunidadbiker.com.conf.
To activate the new configuration, you need to run: service apache2 reload

Tal y como indica, para aplicar los cambios, deberemos reiniciar el servicio de Apache, que podemos hacerlo con el comando

service apache2 reload

Configurar Apache para permitir varios sitios web en un mismo servidor Linux Ubuntu

En la carpeta /etc/apache2/sites-enable nos habrá creado el enlace simbólico:

Si hemos realizado la configuración correcta, navegando al sitio web comunidadbiker.com desde fuera de nuestra red (desde Internet), se redireccionará a la IP pública donde tengamos el servidor, pasará al router/firewall y éste realizará el NAT a la IP local del servidor. El servidor Apache recogerá la petición y según el dominio con el que viene, usará el fichero correspondiente de /etc/apache2/sites-available para abrir el sitio web asignado.

De esta forma podremos tener varios sitios web alojados en un mismo servidor y en una misma red LAN.

Repetiremos el proceso para el resto de sitios web que queramos alojar en este servidor, agregando nuevos ficheros en /etc/apache2/sites-available.