🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Introducción a los Virtual Hosts de Apache: Gestiona Múltiples Dominios Fácilmente

En el artículo anterior, aprendimos a configurar los aspectos básicos del archivo de configuración principal de Apache, `httpd.conf`. Ahora ya deberías poder publicar un único sitio web con confianza. Pero, ¿y si quisieras ejecutar otros sitios, como `example.org` o `blog.example.com`, en el mismo servidor?

La respuesta es una función que presentaremos hoy llamada Virtual Hosts (Anfitriones Virtuales). Esta función te permite operar múltiples sitios web diferentes, cada uno con su propio dominio, en un único servidor (y una única dirección IP), como si tuvieras varios servidores.

En este artículo, explicaremos cómo funcionan los virtual hosts usando una sencilla analogía con un edificio de apartamentos, y te guiaremos a través de los pasos para poner en marcha dos dominios diferentes en tu entorno local con código listo para copiar y pegar. ¡Cuando termines de leer este artículo, la gestión de múltiples sitios ya no te parecerá intimidante!


Entendiendo el funcionamiento de los Virtual Hosts

La forma más fácil de entender los virtual hosts es imaginar tu servidor como un edificio de apartamentos.

Cuando un visitante (un navegador web) llega al edificio de apartamentos (la dirección IP del servidor) y dice: "Vengo a ver al Sr. Pérez (`example.com`)", el administrador del edificio (Apache) dirigirá al visitante al apartamento del Sr. Pérez (el sitio web de `example.com`). Si dice: "Vengo a ver a la Sra. García (`example.org`)", Apache lo dirigirá al apartamento de la Sra. García.

Este mecanismo de comprobar la "placa del nombre" (el nombre de dominio) para decidir a dónde dirigir a los visitantes se llama Virtual Hosting basado en nombres. Es el método más común hoy en día, y es el enfoque que usaremos en este artículo.


Paso 1: Preparación para la configuración de Virtual Hosts

Antes de empezar a escribir archivos de configuración, necesitamos hacer algunos preparativos.

1-1. Habilitar el archivo de configuración de Virtual Hosts

En Apache, se recomienda mantener la configuración de los virtual hosts en un archivo separado para mantener limpio el archivo principal `httpd.conf`. Primero, abre tu archivo `httpd.conf` y busca la siguiente línea. Si tiene un `#` al principio (comentándola), elimina el `#` para habilitarla.

# Descomenta (elimina el #) esta línea en tu archivo httpd.conf
Include conf/extra/httpd-vhosts.conf

Esta única línea le dice a Apache que lea el archivo `conf/extra/httpd-vhosts.conf` y aplique las configuraciones de virtual host que contenga.


1-2. Crear los directorios y archivos de cada sitio

A continuación, vamos a crear las carpetas para nuestros dos sitios, `example.com` y `example.org`, y un archivo HTML para la página de inicio de cada uno. En este ejemplo, crearemos carpetas dedicadas en una ubicación separada de `htdocs` para facilitar la gestión de los datos del sitio web.

  1. En una ubicación de tu elección en tu servidor (ej: /Users/TuNombre/Sites o C:\Users\TuNombre\Sites), crea una carpeta para cada sitio.
    • sites/example.com/public_html
    • sites/example.org/public_html
  2. Dentro de cada carpeta `public_html`, crea un archivo `index.html` simple para que puedas saber qué sitio se está mostrando.

Contenido de `sites/example.com/public_html/index.html`:

<!DOCTYPE html>
<html>
<head><title>¡Bienvenido!</title></head>
<body><h1>Esta es la página de example.com</h1></body>
</html>

Contenido de `sites/example.org/public_html/index.html`:

<!DOCTYPE html>
<html>
<head><title>¡Bienvenido!</title></head>
<body><h1>Esta es la página de example.org</h1></body>
</html>

Paso 2: Configurar los Virtual Hosts (en httpd-vhosts.conf)

Con los preparativos listos, es hora de editar el archivo `conf/extra/httpd-vhosts.conf`. En este archivo, escribiremos la "información del apartamento" para cada uno de nuestros sitios.

Primero, la configuración para `example.com`. Añade el siguiente bloque a `httpd-vhosts.conf`. (Puedes eliminar o comentar con `#` cualquier ejemplo que ya exista en el archivo).

<VirtualHost *:80>
    # El nombre de dominio principal para este virtual host
    ServerName example.com
    # También puedes especificar alias, como la versión con www
    ServerAlias www.example.com
    # La ubicación de los archivos de este sitio (la ruta a la carpeta que acabamos de crear)
    DocumentRoot "/Users/TuNombre/Sites/example.com/public_html"
    # Un log de errores dedicado para este sitio
    ErrorLog "/Users/TuNombre/Sites/example.com/error_log"
    # Un log de acceso dedicado para este sitio
    CustomLog "/Users/TuNombre/Sites/example.com/access_log" common
    # Configuración de permisos de acceso para el directorio
    <Directory "/Users/TuNombre/Sites/example.com/public_html">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

※ Por favor, cambia las rutas como `DocumentRoot` para que coincidan con tu propio entorno.


A continuación, añade la configuración para `example.org`. Escribe este bloque justo debajo del anterior.

<VirtualHost *:80>
    ServerName example.org
    DocumentRoot "/Users/TuNombre/Sites/example.org/public_html"
    ErrorLog "/Users/TuNombre/Sites/example.org/error_log"
    CustomLog "/Users/TuNombre/Sites/example.org/access_log" common
    <Directory "/Users/TuNombre/Sites/example.org/public_html">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Paso 3: Pruebas en el entorno local (archivo hosts)

Bien, la configuración de Apache está lista, pero si intentas acceder a `example.com` ahora mismo, no se conectará a tu ordenador. Para probar esto en un entorno local, necesitamos editar el archivo `hosts` de tu ordenador para forzar la asignación del dominio `example.com` a tu propio ordenador (`127.0.0.1`).

Ubicación del archivo `hosts`:

Abre este archivo con privilegios de administrador y añade las siguientes líneas al final.

127.0.0.1   example.com
127.0.0.1   www.example.com
127.0.0.1   example.org

Paso 4: Reiniciar y verificar Apache

¡Toda la configuración está completa! Finalmente, vamos a ejecutar una comprobación de sintaxis para asegurarnos de que no hay errores en la configuración de Apache y, si todo está bien, reiniciaremos el servidor.

# Comprobación de sintaxis (si no aparecen errores, todo está bien)
httpd -t

# Reiniciar Apache (en Windows)
httpd.exe -k restart

# Reiniciar Apache (en macOS con Homebrew)
brew services restart httpd

# Reiniciar Apache (en Linux)
sudo systemctl restart apache2 # o httpd

Después de reiniciar, intenta acceder a `http://example.com` y `http://example.org` en tu navegador. Si ves "Esta es la página de example.com" y "Esta es la página de example.org" respectivamente, ¡enhorabuena, ha sido un éxito!


Ejemplo avanzado: Usar un subdominio

Los virtual hosts también se pueden usar para ejecutar subdominios (ej: `blog.example.com`). El método de configuración es exactamente el mismo que antes. Solo necesitas añadir un nuevo bloque `<VirtualHost>` a tu archivo `httpd-vhosts.conf`.

<VirtualHost *:80>
    ServerName blog.example.com
    DocumentRoot "/Users/TuNombre/Sites/blog.example.com/public_html"
    # ... y escribe la configuración de logs y Directory de la misma manera ...
</VirtualHost>

¡Por supuesto, no olvides añadir `127.0.0.1 blog.example.com` a tu archivo `hosts` y reiniciar Apache después!


Resumen

¡Buen trabajo! Hoy hemos aprendido sobre la función de virtual hosts, que te permite gestionar múltiples dominios en un único servidor Apache, desde su funcionamiento hasta los pasos de configuración específicos. Esperamos que la analogía del apartamento te haya ayudado a visualizar la relación entre el servidor y los dominios.

Al dominar los virtual hosts, puedes gestionar eficientemente múltiples proyectos diferentes —como un sitio de aficiones, un sitio de portafolio o un proyecto de cliente en desarrollo— todo en una sola máquina. ¡Tus habilidades de administración de servidores acaban de subir de nivel!

Ahora que ya sabes cómo "asignar habitaciones" en tu servidor, probablemente tengas curiosidad por saber cómo establecer "decoraciones interiores" y "reglas" más detalladas para cada habitación. Nuestro próximo tema es una guía completa del archivo mágico que permite todo tipo de control a nivel de directorio: `.htaccess`. ¡No te lo pierdas!

Guía Completa de .htaccess: Cómo Usar Redirecciones, Reescritura de URL y Control de Acceso