Saludos comunidad, me gustaría hacer esta pregunta antes de comenzar este pequeño tutorial, ¿quién no se ha encontrado desarrollando una aplicación web y ha tenido la necesidad de crear un virtualhost para que nuestro entorno de desarrollo sea lo más parecido al de producción?, en mi caso particular me ha sucedido bastante, así que deseo compartir el procedimiento a seguir con todos ustedes.

Antes de ir a lo práctico siempre debemos ver algo de teoría para aquellos que no están muy empapados en el tema.

Apache

Apache es un servidor web, considerado uno de los más populares para proveer contenido web en Internet. Este cuenta con más de la mitad de todos los sitios web activos en la red y es extremadamente poderoso y flexible. Apache divide su funcionalidad y componentes en unidades independientes que pueden ser configuradas independientemente. La unidad básica que describe un sitio individial o el dominio es conocido como virtualhost.

Estas asignaciones permiten al administrador utilizar un servidor para alojar varios dominios o sitios en una simple interface o IP utilizando un mecanismo de coincidencias. Esto es relevante para cualquiera que busque alojamiento para más de un sitio en un solo VPS.

Antes de empezar

Bueno, conociendo un poco la teoría ya podemos pasar al pollo del arroz con pollo, por decirlo en buen cubano. Lo primero que debemos tener en cuenta para poder realizar esta configuración es instalar Apache y esto lo puedes realizar con la siguiente orden:

sudo apt-get install apache2

Una vez instalado el servidor web, podemos comenzar a configurar. La configuración que llevaré a cabo creará un virtualhost para ejemplo.uci.cu y otro para ejemplo.xetid.cu.

Paso Uno – Crear la Estructura del Directorio

El primer paso que necesitamos es crear la estructura de directorios que mantendrán la información de nuestro sitio.

Nuestro documento raíz (el directorio principal en el cual Apache busca el contenido para mostrar) será configurado en directorios individuales dentro de la ruta /var/www/html (para versiones anteriores a ubuntu 14.10 sería en /var/www). Crearemos los directorios aquí para los dos virtual hosts que pretendemos configurar.

Dentro de cada uno de estos directorios crearemos un directorio denominado public_html el cual mantendrá la información pública del sitio y sus respectivos archivos. Esto nos dará más flexibilidad en nuestro alojamiento.

Creamos los directorios donde se contendrán nuestros virtualhosts:

sudo mkdir -p /var/www/html/ejemplo.uci.cu/public_html
sudo mkdir -p /var/www/html/ejemplo.xetid.cu/public_html

Paso Dos – Otorgar Permisos

Ahora tenemos la estructura de los directorios para neustros archivos, pero el usuario root es el propietario de ellos. Si queremos que nuestro usuario regular pueda modificar los archivos en nuestro directorio web, necesitamos cambiar el propietario haciendo lo siguiente:

sudo chown -R $USER:$USER /var/www/ejemplo.uci.cu/public_html
sudo chown -R $USER:$USER /var/www/pruebas.xetid.cu/public_html

La variable $USER tomará el valor del usuario con el cual actualmente estás identificado. Al hacer esto, nuestro usuario regular ahora es propietario de los directorios public_html donde se almacenará nuestro contenido.

Debemos además modificar los permisos un poco para asegurarnos que el permiso de lectura pueda ser aplicado a archivos y directorios para que las páginas puedan ser desplegadas correctamente:

sudo chmod -R 755 /var/www/html

Tu servidor ahora tiene los permisos necesarios para mostrar el contenido, y el usuario deberá ser capaz de crear contenido en los directorios a medida que sea necesario.

Paso Tres — Crear una Página de Prueba para cada Virtual Host

Actualmente tenemos la estructura en su lugar, así que ahora vamos a crear contenido para mostrar. Como solo vamos a hacer una demostración, nuestras páginas serán muy simples. Solo crearemos un archivo index.html para cada sitio.
Empecemos con ejemplo.uci.cu creando un archivo denominado index.html:

nano /var/www/html/ejemplo.uci.cu/public_html/index.html

En este archivo, crea un documento HTML simple que indicara que el sitio está conectado. Mi archivo quedó así:


  
    Bienvenido a Ejemplo.uci.cu!
  
  
    

Éxito! El Virtual Host ejemplo.uci.cu esta funcionando!

Guardamos y cerramos el archivo cuando terminemos.

Podemos copiar este archivo y usarlo de base para nuestro segundo sitio escribiendo:

cp /var/www/html/ejemplo.uci.cu/public_html/index.html /var/www/html/ejemplo.xetid.cu/public_html/index.html

Ahora podemos abrir el archivo y modificar la información relevante:

nano /var/www/html/ejemplo.xetid.cu/public_html/index.html

  
    Bienvenido a Ejemplo.xetid.cu!
  
  
    

Éxito! El Virtual Host ejemplo.xetid.cu esta funcionando!

Guardamos y cerramos como el en caso anterior. Ahora tienes páginas suficientes para probar tu configuración.

Paso Cuatro — Crear Nuevos Archivos Virtual Host

Los archivos Virtual Host son archivos que contienen información y configuración específica para el dominio y que le indican al servidor Apache como responder a las peticiones de varios dominios.

Apache incluye un archivo Virtual Host por defecto denominado 000-default.conf que podemos usar como base. Realizaremos una copia para trabajar sobre ella y crear nuestro Virtual Host para cada dominio. Iniciaremos con un dominio, lo configuraremos y luego copialo lo copiaremos para el segundo dominio, después realizamos los ajustes necesarios.

La configuración por defecto de Ubuntu requiere que cada archivo de configuración de Virtual Host termine en .conf.

Crear el Archivo Virtual Host

Empezemos por copiar el archivo para el primer dominio:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ejemplo.uci.cu.conf

Abre el nuevo archivo con tu editor como usuario root y eliminamos todos los comentarios que existen dentro del mismo, debería quedar así:


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Como podemos ver, no hay mucho aquí. Personalizaremos los datos aquí para nuestro primer dominio y agregaremos algunas directivas adicionales. Esta sección del Virtual Host coincide cualquier peticion que es solicitada al puerto 80, el puerto por defecto de HTTP.
Primero, necesitamos cambiar la directiva ServerAdmin por un correo del administrador del sitio que pueda recibir correos.

ServerAdmin admin@ejemplo.uci.cu

Después de esto, necesitamos agregar dos directivas. La primera llamada ServerName , que establece la  base del dominio que debe coincidir para este Virtual Host. Esto será como tu dominio. La segunda, llamada ServerAlias, determina nombres futuros que pueden coincidir y servirse como el nombre base o dominio principal.

ServerName ejemplo.uci.cu
ServerAlias www.ejemplo.uci.cu

Lo que resta por cambiar para la configuración básica de un Virtual Host es la ubicación del directorio raíz para el dominio. Ya hemos creado lo que necesitamos, así que solo necesitamos modificar DocumentRoot para apuntarlo al directorio que hemos creado:

DocumentRoot /var/www/html/ejemplo.uci.cu/public_html

En total, nuestro archivo de Virtual Host debe verse así:


    ServerAdmin admin@ejemplo.uci.cu
    ServerName ejemplo.uci.cu
    ServerAlias www.ejemplo.uci.cu
    DocumentRoot /var/www/html/ejemplo.uci.cu/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Guarda y cierra el archivo.

Copia el primer Archivo Virtual Host y cámbialo para el Segundo Dominio

Ahora que tenemos nuestro primer archivo Virtual Host configurado, podemos crear el segundo copiando el primero y realizando los cambios necesarios.
Empecemos por copiarlo:

sudo cp /etc/apache2/sites-available/ejemplo.uci.cu.conf /etc/apache2/sites-available/ejemplo.xetid.cu.conf

Abre el nuevo archivo con privilegios root en tu editor:

sudo nano /etc/apache2/sites-available/ejemplo.xetid.cu.conf

Ahora tenemos que modificar todas las piezas de información para referirnos al segundo dominio. Cuando hayas terminado, deberá verse algo así:


    ServerAdmin admin@ejemplo.xetid.cu
    ServerName ejemplo.xetid.cu
    ServerAlias www.ejemplo.xetid.cu
    DocumentRoot /var/www/html/ejemplo.xetid.cu/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Guarda y cierra al concluir.

Paso Cinco — Habilita los nuevos Archivos Virtual Host

Ahora que hemos creado nuestros archivos virtual hosts, debemos habilitarlos. Apache incluye herramientas que nos permiten hacer esto.
Podemos usar la herramienta a2ensite para habilitar cada uno de nuestros sitios haciendo esto:

sudo a2ensite ejemplo.uci.cu.conf
sudo a2ensite ejemplo.xetid.cu.conf

Cuando hayas concluido, deberás reiniciar Apache para asegurarte de que tus cambios surtan efecto:

sudo service apache2 restart

Paso Seis — Configura Archivos Locales

Como nuestros dominios no están registrados en un servidor DNS, debemos adicionarlos en nuestro fichero hosts para que nuestro sistema los asocie a nuestra dirección ip. Para esto editamos el archivo medianto la orden:

sudo nano /etc/hosts

Los detalles que necesitas agregar son la IP de nuestra computadora, en este caso localhost; seguido del dominio que deseas apuntar a la misma.

127.0.0.1       localhost
127.0.0.1       mysginf.xetid.cu
127.0.0.1       ejemplo.xetid.cu
127.0.0.1       ejemplo.uci.cu
127.0.1.1       L-06582

Esto apuntará directamente cualquier petición para ejemplo.uci.cu y ejemplo.xetid.cu en nuestra computadora y enviarlas a nuestro servidor en 127.0.0.1.
Guardamos y cerramos el archivo.

Paso Siete — Prueba tus resultados

Ahora que tenemos nuestros Virtual Hosts configurados, podemos realizar pruebas de configuración simplemente visitando el dominio que hemos configurado mediante nuestro navegador web, accediendo a la url: http://ejemplo.uci.cu/, deberás ver algo como esto:

Mientras que en la ruta: http://ejemplo.xetid.cu/

Si en ambos sitios funciona bien, entonces has configurado correctamente dos Virtual Hosts en el mismo servidor.

Espero que les sea de ayuda.