Ir al contenido principal

Varios Dominios en un Solo Servidor Web (Virtual Hosts - More than One Domain With One Web Server)

Nota: Las siguientes indicaciones fueron probadas pro mi en Linux Crunchbang 11 (32-bit) alías Waldorf.

Si tu deseas tener más de un dominio en un solo servidor Web, es muy probable que necesites hacer uso de Virtual Hosts para ello. Virtual Hosts, te da la posibilidad de tener más de un sitio Web (o dominio) en un solo servidor. En este artículo te explicaremos como hacerlo.

Para este articulo crearemos dos dominios: dominio1.com y dominio2.com

Creando el Layout
Si usas Debian o Crunchbang, vete a /var/www, y create el sigiuente conjunto de carpetas:
mkdir -p dominio1.com/{public,private,log,cgi-bin,backup}
y
mkdir -p dominio2.com/{public,private,log,cgi-bin,backup}

Archivo para Probar los Dominios
Para probar que los dos dominios trabajan, crearemos un archivo sencillo en HTML llamado index.html, el cual contendra dentro de el, lo siguiente:
<html>
  <head>
    <title>dominio#.com</title>
  </head>
  <body>
    <h1>dominio#.com</h1>
  </body>
</html>

Nota: Recuerde crear estos archivos en la ruta dominio#.com/public/index.html y reemplazar el símbolo # por 1 y 2 para cada dominio respectivamente.

Ya hecho esto, tenemos la estructura para crear los Virtual Hosts.

Configurando los Permisos
Con el fin de que el servidor Apache pueda servir tus dominios, este deberá tener permisos de lectura para varios archivos que componen tus sitios. Para asegurarnos que tenemos los permisos de la manera correcta, debemos ejecutar los siguientes comandos para ambos dominios:
sudo chmod -R a+rX /var/www/dominio#.com

Este comando establece que todo en su directorio dominio#.com debe ser legible y accesible por todos los usuarios del sistema.
Si agrega más directorios de dominios virtuales adicionales posteriormente, ejecute el comando de nuevo para asegurarse de que los nuevos directorios son accesibles.


NameVirtualHost

Para cada interfaz y puerto, Apache está configurado para escuchar una directiva NameVirtualHost. Algo a tener en cuenta es que sólo se puede definir de una vez por puerto.

En el diseño de configuración de Apache hay una directiva NameVirtualHost por defecto que se encuentra en el archivo "ports.conf"
Vamos a echar otro vistazo a los contenidos de "ports.conf":
cat /etc/apache2/ports.conf

La salida del comando anterior debería ser:
NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    Listen 443
</IfModule>

El ajuste predeterminado (por defecto) del NameVirtualHost satisface nuestras necesidades presentes. Apache aplicará la lógica de virtual host basada en nombres y los valores de peticiones HTTP realizadas en cualquier interfaz disponible (*) en el puerto 80.


Personalizando los Virtual Host
Para cada sitio Web, debemos crear un archivo conocido como vhost file. Estos son creados en la siguiente ruta: /etc/apache2/sites-available. Un ejemplo para el sitio o dominio1, sería:
sudo nano /etc/apache2/sites-available/dominio1.com

Ahora como modelo general el vhost file debe contener lo siguiente (los valores pueden cambiar en base a lo que tu sitio Web debe contener):
# Place any notes or comments you have here
# It will make any customization easier to understand in the weeks to come

# dominio: dominio1.com
# public: /var/www/dominio1.com/

<VirtualHost *:80>

  # Admin email, Server Name (domain name) and any aliases
  ServerAdmin webmaster@domain1.com
  ServerName  dominio1.com
  ServerAlias domain1.com


  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.html
  DocumentRoot /var/www/dominio1.com/public


  # Custom log file locations
  LogLevel warn
  ErrorLog  /var/www/dominio1.com/log/error.log
  CustomLog /var/www/dominio1.com/log/access.log combined

</VirtualHost>

Activando el Sitio
Ya tenemos el sitio disponible y debemos activarlo con el siguiente comando:
sudo /usr/sbin/a2ensite dominio1.com
La salida del comando debe ser:
Site dominio1.com installed; run /etc/init.d/apache2 reload to enable.
En Kali Linux 1.0, el mensaje o salida es:
Enabling site domain1.com.
To activate the new configuration, you need to run:

service apache2 reload

Y como dice la salida, reiniciamos el Apache:
sudo /etc/init.d/apache2 reload
En Kali Linux 1.0, en lugar de ejecutar a2ensite domain1.com, puedes correr: service apache2 reload


Probando Nuestros Sitios
Para probar el dominio sin necesidad de crear una zona DNS y el registro (s) en algún servidor de nombres de Internet (s), he modificado el archivo "/etc/hosts" en mi equipo local para incluir algunas de las entradas de mapeo "dominio1.com", etc.:
127.0.0.1    localhost
...

# entries related to the demo slice
123.45.67.890   dominio1.com
123.45.67.890   www.domain1.com
123.45.67.890   dominio2.com
...

Puede agregar entradas similares en su archivo "hosts", aunque su ubicación puede variar dependiendo de qué sistema operativo estes utilizando.

Ahora, probemos accediendo al sitio dominio1.com desde nuestro navegador preferido:
Domain1 Home Page
Tu deberías ver tu archivo index.html que configuramos para este virtual host.

ServerAlias
Nota que en el archivo vhost hemos agregado la sentencia ServerAlias. Si tu tienes los DNS configurados correctamente, tu podrías usar la dirección establecida en el ServerAlias para alcanzar tu sitio Web. Para próposito de prueba, tú puedes agregar otra línea en el archivo host (como hicimos arriba en este mismo artículo):
Domain1 Home Page (hostname alias)


Repetir Pasos para el Dominio o Sitio Web 2
Para crear y activar el dominio2.com, simplemente has lo siguiente:

sudo nano /etc/apache2/sites-available/dominio2.com
...
# Entre los detalles para dominio2.com como en el ejemplo de arriba
Para activar el sitio y reiniciar el Apache:
sudo a2ensite dominio2.com
...
sudo /etc/init.d/apache2 reload
Finalmente adiciona una entrada a tu archivo host de tu computadora y navega al segundo dominio:
http://dominio2.com
or
http://www.dominio2.com
Si todo fue configurado bien, tú verás el archivo Index del dominio2.com.

Archivos Logs
Como fue definido en los archivos vhost, cada dominio tiene sus propios Log files. Vamos a verlos:
ls /var/www/dominio1.com/log/

La salida debería reflejar lo configurado en los vhost:
access.log  error.log

Observaciones
  • Recuerde que la máquina virtual predeterminada se encuentra todavía en su lugar.
  • Ahora, si alguien accede a la dirección IP de su servidor verán al sitio definido por dicho archivo vhosts por defecto (siempre, claro está, que no hayan establecido un host virtual independiente para la dirección IP).
  • ¿Por qué se sirve a partir de ese archivo host virtual?. Apache busca en los vhosts habilitados en orden alfabético, y si no puede encontrar uno que se aplica específicamente a la dirección IP o nombre de dominio solicitado, sólo sirve el primer host virtual que vio.
  • Si hubiéramos deshabilitado o eliminado el host virtual predeterminado, se muestra el contenido de dominio1.com (siendo este antes que dominio2.com alfabéticamente).
  • Esto es algo a tener en cuenta en la planificación de sus sitios web. ¿Quieres un dominio particular sea el dominio por defecto? ¿Desea que una dirección IP tenga un contenido completamente diferente?

Este artículo se basa en su gran mayoría del siguiente artículo o enlace: http://articles.slicehost.com/2010/5/20/apache-virtual-hosts-on-debian-part-1

Comentarios

Entradas populares de este blog

Error al recuperar un generador de clases COM para el componente con CLSID {############} debido al siguiente error: 80040154

Hello Everyone!! Realmente no se si este mensaje de error es genérico o específio. Por ende, voy a decirles que si están: - Usan Visual Studio 2010 - Windows 7 x64 - Y tan trantando de correr un programa desarrollado en una versión anterior al VS 2010 y que hace referencia a DLL's, entonces chequeate este video, porque te va a dar la solución: www.youtube.com/watch?v=pDtyGns6mOw Fin!!!

Como Aplicar un Patch a un Programa en Linux (How to Apply a Patch en Linux)

Los comandos aplicados en este articulo fueron realizados en la distro Kali 1.0 (based in Debian) Una de las ventajas de los programas (software) open source es que podemos descargar los paquetes fuentes de estos que son los que contienen todos los codigos fuentes. Con ellos podriamos, modificar el mismo y crear nuevas funcionalidades (features) o corregir algun fallo. Para mantener un orden o integridad, es bueno que las modificaciones hechas al paquete fuente original, se realicen en un patch file. El patch file es un archivo que debe aplicarse al codigo fuente original utilizando el comando con el nombre patch . Que contiene un archivo patch? Contiene lineas de codigo fuente de uno o mas archivos contenidos en el paquete fuente original. La extension de un archivo patch es .patch Consideraciones Cosas que hasta el momento no encontre en la Web y que debes de saber de como aplicar un Patch son: 1.  El patch se aplica al paquete fuente de la aplicacion que deseas aplicar

Pasar Valores de Ventana Hija a Padre (Pass values from Child to Parent Windows with PHP and Javascript)

En este articulo, la ventana hija es un listado de clientes, donde el usuario a darle clic a un cliente, se retorna el ID del Cliente a un objeto Input tipo  hidden y el Nombre del Cliente a un objeto Input tipo  Text . En la ventana padre agrega un hipervinculo como el siguiente: <a href="#" id="customer_search" onClick="showModalSendAndReturnValues('customers_search.php', ''); return false;">Abrir Ventana Hija</a> y crea dos objetos HTML Input: <input type="text" id="customer_name"> <input type="hidden" id="customer_id"> El evento onClick sera el que dispare la función que abre la ventana hija.  El return false , es importante ya que evita que la ventana padre se auto-refresque y nos lleve a otra pagina. La funcion showModalSendAndReturnValues , es un Javascript que puede ir en el header de tu pagina padre o en un archivo de funciones javas