En este nuevo tutorial os enseñaré lo fácil que resulta configurar el servidor Web Apache para permitir varios dominios/Virtual Hosts y conseguir minimizar tanto los costes € como las tareas de administración sobre los servidores. La configuración la he realizado sobre un equipo con GNU/Linux Ubuntu Server, pero podemos extrapolar casi el 100% de los pasos a cualquier otra distribución incluso a otro Sistema Operativo como puede ser Microsoft Windows.
⬇️ Compra en Amazon el hardware que utilizo ⬇️
- 💻 Ordenador Portátil: Descúbrelo aquí
- 🖥️🖥️ Monitores: Mis 2 súper monitores
- ⌨️ Teclado: Mini teclado + Lector DNIe
- 🖱️ Ratón: Mi ratón programable
- 🎧 Auriculares: Súper Auriculares TOP!
- 🖨️ Impresora: Mi fantástica impresora
- 🗄️ NAS Backup: Mi NAS para Backups
- 🔌 HUB USB: Mi HUB para puertos USB
- 📱 Smartphone: Mi Smartphone
- 📲 Tablet: Mi tablet para viajes
- ⌚ Smartwatch: Mi Smartwatch favorito
- 📹 Cámara deportiva: Mi cámara para deportes
El servidor Web por excelencia es Apache. Aunque a día de hoy existen multitud de alternativas, como lighttpd, nginx, Tomcat, IIS ... Apache es sin duda líder en servir las Webs en Internet e Intranets.
¿Qué es un Virtual Host?
Imaginemos uno de los miles de proveedores de Hosting que hay en el mundo. Cada hosting tiene N clientes y esos clientes quieren tener su Web alojada en los servidores del proveedor. Los Virtual Hosts posibilitan a los servidores Web de gestionar N páginas Webs con dominios diferentes pero con una única IP. Por ejemplo, si configuramos un servidor Apache con 2 Virtual Hosts www.ejemplo1.com y www.ejemplo2.com, podemos alojar dichas páginas en un único servidor con la IP 80.33.120.201.
Y te preguntarás, ¿cuando pido una de esas 2 páginas, como sabe el servidor a que página quiero acceder si la IP resuelta por el DNS es la misma? Bien, la solución son los Virtual Host. ¡Lo has adivinado! En los paquetes TCP que se envían al servidor Web, se especifica el destino al que queremos acceder y es el servidor Web quien analiza esas peticiones y nos autoriza para acceder al contenido de www.ejemplo1.com ó de www.ejemplo2.com.
Cada dominio que configuremos, tendrá asociado un directorio diferente en el cual irá almacenado su contenido. Podemos crear tantos Virtual Hosts como queramos, siempre en función de la carga que soporte el Servidor Web y de la configuración Apache que hagamos. Se podría decir que "no hay limites".
1.- ELEMENTOS UTILIZADOS EN ESTE TUTORIAL
- [Servidor Web] - GNU/Linux Ubuntu Server 16.04
- [Cliente Web] - Windows 7
2.- INSTALACIÓN DEL SERVIDOR WEB APACHE
Lo primero, como es habitual en todos los tutoriales, es instalar el paquete base, en nuestro caso será Apache2.
Instalaremos el paquete con usuario root ó con un usuario con permisos de sudo. Actualizaremos previamente nuestros repositorios:
# apt-get update
# apt-get install apache2
3.- ESTRUCTURA Y PERMISOS DE DIRECTORIOS
Por defecto, la instalación de Apache crea un directorio principal llamado /var/www/html/ donde irán alojado el contenido principal del la única página que se crea por defecto en la instalación. En otras distribuciones que no sea Ubuntu, el directorio puede cambiar, aunque generalmente está en /var/www/. Para este tutorial usaremos 2 nombres de dominio de ejemplo, por ejemplo: www.raul-ejemplo1.com y www.raul-ejemplo2.com , ambos alojados en el mismo servidor y gestionados por un único servidor Web.
Crearemos 2 directorios, uno para cada uno de los dominios de ejemplo:
# mkdir /var/www/html/raul-ejemplo1.com/public_html
# mkdir /var/www/html/raul-ejemplo2.com/public_html
Debemos asegurarnos que los directorios tienen como propietario www-data y grupo www-data. Por ejemplo en Red Hat estos usuarios son Apache y Apache, cuidado en este paso:
# chown -R www-data.www-data /var/www/html/raul-ejemplo1.com
# chown -R www-data.www-data /var/www/html/raul-ejemplo2.com
Para asegurarnos que nadie, excepto el propietario www-data pueda escribir en el (los) directorios, cambiaremos los permisos de ambos directorios:
# chmod -R 0755 /var/www/html/raul-ejemplo1.com
# chmod -R 0755 /var/www/html/raul-ejemplo2.com
Dentro de cada uno de los directorios (public_html), podemos crear una página Web diferente para visitarla a posteriori, pero lo que yo haré será descargar el paquete de instalación de Wordpress y descomprimirlo en cada directorio con el fin de emular 2 "sites" web.
- raul-ejemplo1.com = Wordpress1
- raul-ejemplo2.com = Wordpress2
Como puede verse, las direcciones para entrar a los 2 sites son bastante "feas": http://192.168.145.212/raul-ejemplo1.com/public_html/ y http://192.168.145.212/raul-ejemplo2.com/public_html/:
2 instalaciones diferentes de Wordpress
4.- CONFIGURACIÓN DEL VIRTUALHOST 1
Los archivos Virtual Host contienen la información necesaria para el (los) dominios en cuestión y le indican al servidor Web Apache como deben responder a las peticiones realizadas a dicho(s) dominio(s).
Por defecto, Apache incluye un archivo Virtual Host llamado 000-default.conf y sobre el cual podemos basar nuestra configuración inicial. Por tanto el primer paso será copiar dicho fichero para el primer dominio www.raul-ejemplo1-com:
# cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/raul-ejemplo1.com.conf
El archivo raul-ejemplo1.com (sin comentarios) tiene el siguiente aspecto:
ServerAdmin webmaster@localhost
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Editaremos el fichero y lo configuraremos para que se adapte a nuestras necesidades. Mostraré como queda el fichero final y explicaré las líneas importantes que hay que configurar en él:
ServerAdmin Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
ServerName raul-ejemplo1.com
ServerAlias www.raul-ejemplo1.com
DocumentRoot /var/www/html/raul-ejemplo1.com/public_html
ErrorLog ${APACHE_LOG_DIR}/raul-ejemplo1_error.log
CustomLog ${APACHE_LOG_DIR}/raul-ejemplo1_access.log combined
- ServerAdmin: Indicamos el email del administrador
- ServerName: Indicamos el nombre del dominio
- ServerAlias: Indicamos el nombre completo del dominio
- DocumentRoot: Indicamos el PATH al directorio principal donde se ubican los ficheros Web.
- ErrorLog: Ruta y nombre del fichero de error.
- CustomLog: Ruta y nombre del fichero de accesos.
Guardamos el fichero.
5.- CONFIGURACIÓN DEL VIRTUALHOST 2
Copiaremos el fichero de configuración del dominio raul-ejemplo1.com y modificaremos los campos para adaptarlos al segundo dominio:
# cp /etc/apache2/sites-available/raul-ejemplo1.com.conf /etc/apache2/sites-available/raul-ejemplo2.com.conf
El fichero de configuración del segundo dominio raul-ejemplo2.com tendrá el siguiente aspecto:
ServerAdmin Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
ServerName raul-ejemplo2.com
ServerAlias www.raul-ejemplo2.com
DocumentRoot /var/www/html/raul-ejemplo2.com/public_html
ErrorLog ${APACHE_LOG_DIR}/raul-ejemplo2_error.log
CustomLog ${APACHE_LOG_DIR}/raul-ejemplo2_access.log combined
Para finalizar, guardaremos el fichero .
6.- HABILITAR LOS 2 NUEVOS SITES
Para activar los 2 nuevos "sites", debemos recurrir a la herramienta de Apache a2ensite (Apache Enable Sites). Activaremos los 2 dominios con los siguientes comandos y después recargaremos la configuración de Apache:
# a2ensite raul-ejemplo1.com.conf
# a2ensite raul-ejemplo2.com.conf
# /etc/init.d/apache2 reload
Activación y recarga de los 2 nuevos sites
7.- COMPROBACIÓN DE LOS VIRTUALHOSTS SIN SERVIDOR DNS
Para probar si nuestro servidor está reconociendo los 2 VirtualHost nuevos y no tenemos un servidor de DNS que nos resuelva dichos dominios, podemos crear 2 nuevas entradas fijas de forma manual en el fichero "hosts" de nuestro equipo. Para el caso de los Windows el fichero es c:\Windows\System32\Drivers\etc\lmhosts y en los GNU/Linux /etc/hosts.
Deberemos añadir las lineas siguientes:
192.168.145.212 raul-ejemplo1.com
192.168.145.212 www.raul-ejemplo1.com
192.168.145.212 raul-ejemplo2.com
192.168.145.212 www.raul-ejemplo2.com
La dirección IP de mi servidor Web es 192.168.145.212. Cambia esa IP por la de tu servidor Web.
Virtualhost funcionando
8.- COMPROBACIÓN DE LOS VIRTUALHOSTS CON UN SERVIDOR DNS
Para configurar un servidor DNS con los 2 nuevos dominios, hay que instalar el servidor Bind9 y añadir las entradas de los 2 Virtual Host. En la siguiente URL puedes encontrar un manual de como instalar tu propio servidor de DNS:
ENJOY!