martes, 9 de octubre de 2012

Alojar varios dominios en un hosting con Apache

En muchas ocasiones, desearemos alojar varias sitios web con diferentes dominios en el mismo Hosting. La mayoría de los servicios de Hosting usan a Apache como servidor web, el cual permite alojar múltiples dominios sobre una misma IP.
El proceso de configuración usa los denominados VirtualHost de Apache y se hace del siguiente modo...

En este mini tutorial se considerará que Apache está instalado sobre un sistema Linux (Ubuntu), pero si desea hacer lo mismo cuando Apache se encuentra instalado en Windows el proceso tendrá algunas similitudes.

Configurando VirtualHost

Apache tiene la capacidad de reconocer múltiples dominios bajo un misma IP.
Esta característica permite alojar múltiples sitios web en el mismo Hosting o Servidor, usando en cada uno de esos sitios web un dominio distinto. Esta característica de Apache, ofrece una opción económica de mantener varias websites sin aumentar el costo del servicio de Hosting, naturalmente si las condiciones de tráfico agregado no afecten el servicio.

Esta es. la configuración de múltiples dominios, una tarea habitual para un desarrollador de páginas web en los Servicios de Alojamiento del tipo:
  • En modalidad de VPS (servidor virtual dedicado) hasta los Servidores Dedicados. Donde es permitido un mayor control sobre las opciones de configuración del servidor.
En los servicios de Alojamiento Compartido (shared hosting), en general, esta operación se hace desde un panel de administración basado en web (ej: cPanel).

Apache dispone de las directivas de configuración denominadas VirtualHost para desarrollar esta tarea.

Apache en Linux (Ubuntu) maneja la configuración de los distintos Dominios (sitios web), convenientemente en archivos separados que se localizan en el directorio: /etc/apache2/sites-available .

Para conocer la estructura de los archivos de configuración de dominios, sólo basta revisar algunos de los archivos bajo ese directorio:
cd /etc/apache2/sites-available

Ahí encontraremos dos (2) archivos de configuración de nombres: "default" y "default-ssl", que contienen la estructura de configuración típica, tanto para sitios web tradicionales, como en sitios web con acceso seguro (SSL) respectivamente.

Acá sólo requerimos, conocer la estructura de un sitio web tradicional. Por lo tanto, ejecutamos el comando:
cat default | more

Ahora se tomará como plantilla el archivo "default", y se hará una copia de él con un nuevo nombre, que llamaremos por conveniencia: "dominio1.com" (podría ser cualquier nombre), este proceso se hace con:
sudo cp default dominio1.com

Luego, editamos el archivo "dominio1.com", usando cualquier editor de textos, preferiblemente editores de modo texto (ej: nano, vi, vim).
Se deben modificar y/o agregar las directivas referentes al DocumentRoot y ServerName. Así, las primeras líneas del archivo "dominio1.com", debiera quedar:
<VirtualHost *:80>
 DocumentRoot /var/www/dominio1
 ServerName www.dominio1.com
 ...

El "DocumentRoot" identifica el directorio de publicación que usará Apache para el dominio www.dominio1.com especificado en el "ServerName".

Finalmente, para dejar el dominio disponible sólo nos restan dos (2) pasos:
  • Hacer el sitio disponible.
  • Crear el directorio de publicación del nuevo dominio (/var/www/dominio1).
  • Reinicializar Apache (restart)o hacer que sólo lea la nueva configuración (reload) sin reiniciar el servicio.
Para hacer el sitio disponible, sólo es necesario crear un enlace simbólico en el directorio "sites-enables", esta es una característica de configuración muy practica de Apache, pues en el caso que se desea desactivar un sitio, sólo hay que eliminar el enlace simbolico y no se requiere de eliminar o mover el archivo de configuración del dominio. Para activar el dominio, se hace con la instrucción:
sudo a2ensite dominio1

Nota: Si desearamos desactivar el dominio, se recurre a la instrucción "a2dissite".

Ahora la creación del directorio de publicación del dominio y al menos un archivo index de ejemplo:
sudo mkdir /var/www/dominio1
cd /var/www/dominio1

sudo touch index.html
sudo chmod 777 index.html 

sudo echo "Dominio OK!" > index.html

Finalmente, se hace que Apache vuelva a leer sus archivos de configuración sin detener el Servicio:
sudo /etc/init.d/apache2 reload
(o usando: sudo service apache2 reload)
Si se desea habilitar un segundo dominio "dominio2", se deberá volver a repetir el proceso.

En el caso, que se desea configurar múltiples dominios sobre un servidor de desarrollo local, se debe indicarle al Sistema Operativo la ruta del nuevo dominio para impedir que las búsquedas se hagan en la internet, haremos un tutorial explicando los detalles necesarios bajo esa configuración.

Otros artículos relacionados

19 comentarios:

  1. Como Acceso a cada uno de los dominios sin dns??? o solo funciona de manera local

    ResponderEliminar
    Respuestas
    1. Funciona de manera local y también funciona de manera remota, en este último caso cuando dispones de nombres de dominio.

      Eliminar
  2. Hola. Cree dos dominios con no-ip y redirección de puerto y me funcionan bien de manera local, pero de manera remota ambos dominios abren uno solo de los dominios, siempre el mismo. Cómo puedo hacer para que apache2 reconozca el nombre de cada dominio y lo envie a la carpeta correcta. Gracias

    ResponderEliminar
    Respuestas
    1. Primero examina que petición esta recibiendo Apache cuando se accede remotamente. Eso puedes verlo en los archivos LOG.

      Eliminar
  3. Excelente! Muy útil, me sirvió.. Muchas gracias

    ResponderEliminar
  4. Interesante, lo voy a probar, gracias

    ResponderEliminar
  5. Excelente!
    Muy buena forma de explicarlo.
    Especial para quienes tienen su plan de hosting compartido.

    SAludos Cordiales!

    ResponderEliminar
  6. Muy buen tutorial para quienes desea mantener el sistema operativo sin panel de control como cPanel. El negocio del web hosting en méxico ha crecido mucho :D

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu comentario Anheka, estoy de acuerdo contigo es bueno saber hacer las cosas sin estar obligados a usar los típicos wizard, sino que estar preparado para enfrentar situaciones más generales sin contaminar el hosting.

      Eliminar
  7. al momento de activar el dominio me marca un error, que el sitio no existe, qué debo hacer? :(

    ResponderEliminar
    Respuestas
    1. Judith revisa si el comando 'a2ensite' está efectivamente copiando el archivo de la configuración del nuevo dominio al directorio.

      Eliminar
    2. Entra en /etc/apache2/sites-available y al archivo que creaste ponle terminación .conf ejemplo: miweb.com.conf y ejecuta a2ensite veras como ahora si te lo reconoce. debería aclarar esto en el tutorial.
      un saludo

      Eliminar
  8. Buen día, soy nuevo en el mundo de dominios web y quisiera saber si hay alguna posibilidad de que un dominio es decir www.midominio.com apunte a ip_publica:9090.

    muchas gracias.

    ResponderEliminar
    Respuestas
    1. Sacros, todo dominio se traduce en un IP, en especial los dominios en internet se traducen a una IP pública. Ahora lo que tu quieres hacer es solamente indicarle al servicio web que escuche en el puerto 9090. Eso es todo.

      Eliminar