¿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
wwwpara un usuario específico con suindex.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'

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

🚀 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:
- Ve a Servidores → Servidor DNS BIND (o DHCP Server si usas DNS integrado).
- Selecciona Crear zona maestra.
- 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.comen lugar deadmin@beneyto.com).
- Nombre de dominio:
- Pulsa Crear.

🚀 Crear el VirtualHost en Apache
Opción A — Desde Webmin (recomendado)
- Ve a Servidores → Servidor Web Apache.
- Selecciona Crear virtual hosts.
- Rellena:
- Dirección IP del servidor: la IP del servidor (ej.
192.168.101.1). - Ruta del documento: la ruta a la carpeta
wwwdel usuario (ej./home/client/www). - Nombre del servidor: el dominio completo, incluyendo
http://al principio (ej.http://www.beneyto.com).
- Dirección IP del servidor: la IP del servidor (ej.
- Pulsa Crear.

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áginaindex.htmldel usuarioclient. - Importante: si usas nombre de dominio, asegúrate de escribir
www.beneyto.com(conwww) 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
| Error | Causa | Solución |
|---|---|---|
403 Forbidden | Permisos de la carpeta www no permiten el acceso a Apache | chmod -R 755 /home/client/www y chmod 755 /home/client |
404 Not Found | La ruta DocumentRoot en el VirtualHost no coincide con la ruta real | Verifica 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 correcto | Verifica la zona DNS en Webmin o usa la IP directamente como prueba |
| Apache no sirve el VirtualHost | El archivo .conf no está en sites-enabled | Ejecuta sudo a2ensite client.conf y sudo systemctl restart apache2 |
| Página por defecto en lugar del VirtualHost | El VirtualHost predeterminado tiene prioridad | Añade ServerName al VirtualHost de Apache y comprueba el orden de carga |
ERR_CONNECTION_REFUSED en el cliente | Apache no está corriendo o el firewall bloquea el puerto 80 | sudo systemctl restart apache2 y sudo ufw allow 80/tcp |
🪜 Siguiente nivel
Una vez domines los VirtualHosts, la escalera natural es:
- Proteger una carpeta con contraseña para secciones privadas: Cómo proteger una carpeta con contraseña en Webmin.
- Configurar DHCP para asignar IPs automáticamente en tu red: Instalación y configuración de DHCP.
- Obtener un certificado SSL para que tu sitio funcione con HTTPS: Cómo obtener un certificado SSL.
- Docker como alternativa — contenedores ligeros para desplegar servicios web aislados: Docker: instalación y primeros pasos.
