Cómo crear un servidor virtual con Apache y Webmin

Cómo crear un servidor virtual con Apache y Webmin

Configura un servidor virtual (VirtualHost) en Apache para alojar páginas web de un usuario específico, accesibles desde el cliente por IP o nombre de dominio. Incluye configuración de Webmin y comprobación.

FECHA:
ACTUALIZADO:
AUTOR:Jorge Beneyto Castelló
LECTURA:6 MINUTOS DE LECTURA

¿Necesitas que un usuario específico pueda alojar su propia página web en tu servidor sin que interfiera con el sitio principal? Un servidor virtual (VirtualHost) en Apache permite exactamente eso: que el mismo servidor atienda peticiones para diferentes dominios o IPs, cada uno con su propio contenido. En esta guía vemos cómo configurarlo desde Webmin y desde la terminal, paso a paso.

🤔 ¿Qué vamos a conseguir?

  • Instalar Apache en el servidor si no lo tienes.
  • Crear una carpeta www para un usuario específico con su index.html.
  • Configurar un VirtualHost en Apache para que ese usuario tenga su propio sitio web.
  • Crear un nombre de dominio en Webmin (DHCP) que apunte al servidor.
  • Verificar que el sitio es accesible desde el cliente por IP y por nombre de dominio.

🧰 Prerrequisitos

  • Un servidor Linux (Debian/Ubuntu) con acceso root o sudo.
  • Webmin instalado y accesible (opcional, pero muy recomendable para la configuración gráfica).
  • Un equipo cliente en la misma red para probar la configuración.
  • Conocimientos básicos de terminal y permisos en Linux.

🛠️ Instalar Apache

Si Apache no está instalado, ejecuta en el servidor:

sudo apt update
sudo apt install apache2

Comprueba que el servicio está activo:

sudo systemctl enable --now apache2
sudo systemctl status apache2

Abre el navegador del cliente y accede a http://ip_del_servidor. Deberías ver la página por defecto de Apache.

🚀 Configurar la carpeta del usuario

Paso 1 — Crear la estructura de carpetas

El plan es que cada usuario tenga su propia carpeta www con su página web. Usaremos el usuario client como ejemplo:

# Crear la carpeta www del usuario (si no existe)
sudo mkdir -p /home/client/www

# Crear un index.html de prueba
sudo bash -c 'cat > /home/client/www/index.html << EOF
<!DOCTYPE html>
<html>
<head><title>Sitio de client</title></head>
<body>
  <h1>Esta es la pagina web de client</h1>
  <p>Funciona desde el servidor virtual de Apache.</p>
</body>
</html>
EOF'
Estructura de carpetas var/www en el servidor

Paso 2 — Ajustar permisos

Apache ejecuta el proceso con el usuario www-data. Necesita permiso de lectura sobre la carpeta:

# Permisos de lectura para Apache
sudo chmod -R 755 /home/client/www

# Asegurar que el directorio home del usuario también permite el acceso
sudo chmod 755 /home/client
Archivo index.html en la carpeta del usuario

🚀 Crear el nombre de dominio en Webmin (DHCP)

Para que el cliente pueda acceder al sitio por nombre de dominio (por ejemplo, www.beneyto.com), necesitas crear un registro DNS que apunte al servidor. En Webmin:

  1. Ve a Servidores → Servidor DNS BIND (o DHCP Server si usas DNS integrado).
  2. Selecciona Crear zona maestra.
  3. Rellena:
    • Nombre de dominio: beneyto.com
    • IP asociada: la IP del servidor (ej. 192.168.101.1)
    • Correo de contacto: un correo válido (formato DNS: admin.beneyto.com en lugar de admin@beneyto.com).
  4. Pulsa Crear.
Configuración del VirtualHost en Webmin

🚀 Crear el VirtualHost en Apache

Opción A — Desde Webmin (recomendado)

  1. Ve a Servidores → Servidor Web Apache.
  2. Selecciona Crear virtual hosts.
  3. Rellena:
    • Dirección IP del servidor: la IP del servidor (ej. 192.168.101.1).
    • Ruta del documento: la ruta a la carpeta www del usuario (ej. /home/client/www).
    • Nombre del servidor: el dominio completo, incluyendo http:// al principio (ej. http://www.beneyto.com).
  4. Pulsa Crear.
VirtualHost creado y funcionando en Webmin

Opción B — Desde la terminal

Si prefieres tocar la configuración directamente, crea un archivo de VirtualHost:

sudo nano /etc/apache2/sites-available/client.conf

Contenido del archivo:

<VirtualHost *:80>
    ServerName www.beneyto.com
    DocumentRoot /home/client/www

    <Directory /home/client/www>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/client_error.log
    CustomLog ${APACHE_LOG_DIR}/client_access.log combined
</VirtualHost>

Habilita el sitio y reinicia Apache:

sudo a2ensite client.conf
sudo systemctl restart apache2

🧪 Comprobar que funciona

  • Por IP desde el cliente: abre el navegador y escribe http://192.168.101.1 — deberías ver la página por defecto de Apache (o la del VirtualHost si es el único).
  • Por nombre de dominio: escribe http://www.beneyto.com — deberías ver la página index.html del usuario client.
  • Importante: si usas nombre de dominio, asegúrate de escribir www.beneyto.com (con www) si así lo configuraste en el VirtualHost.
  • Verificar desde la terminal:
# Comprobar que Apache responde
curl -s -o /dev/null -w "%{http_code}" http://www.beneyto.com

# Ver el contenido del VirtualHost
sudo apache2ctl -S

# Listar los sitios habilitados
ls /etc/apache2/sites-enabled/

⚠️ Errores comunes

ErrorCausaSolución
403 ForbiddenPermisos de la carpeta www no permiten el acceso a Apachechmod -R 755 /home/client/www y chmod 755 /home/client
404 Not FoundLa ruta DocumentRoot en el VirtualHost no coincide con la ruta realVerifica la ruta con ls -la /home/client/www/ y corrige el VirtualHost
Could not resolve hostname (nombre de dominio)El registro DNS no apunta al servidor correctoVerifica la zona DNS en Webmin o usa la IP directamente como prueba
Apache no sirve el VirtualHostEl archivo .conf no está en sites-enabledEjecuta sudo a2ensite client.conf y sudo systemctl restart apache2
Página por defecto en lugar del VirtualHostEl VirtualHost predeterminado tiene prioridadAñade ServerName al VirtualHost de Apache y comprueba el orden de carga
ERR_CONNECTION_REFUSED en el clienteApache no está corriendo o el firewall bloquea el puerto 80sudo systemctl restart apache2 y sudo ufw allow 80/tcp

🪜 Siguiente nivel

Una vez domines los VirtualHosts, la escalera natural es:

  1. Proteger una carpeta con contraseña para secciones privadas: Cómo proteger una carpeta con contraseña en Webmin.
  2. Configurar DHCP para asignar IPs automáticamente en tu red: Instalación y configuración de DHCP.
  3. Obtener un certificado SSL para que tu sitio funcione con HTTPS: Cómo obtener un certificado SSL.
  4. Docker como alternativa — contenedores ligeros para desplegar servicios web aislados: Docker: instalación y primeros pasos.

🔗 Enlaces y recursos

COMPARTIR:
COMENTARIOS:

📋 Contenido