Despliegue y configuración de Servidor Web en VM Ubuntu IaaS: Virtual Hosts, HTTPS, y redirección


Cuando se alojan múltiples sitios web o servicios en un solo servidor, los virtual hosts son una herramienta fundamental. Un virtual host es una configuración que permite a un servidor web, como Apache, servir contenido diferente según el nombre de dominio o la dirección IP de la solicitud entrante. Este enfoque es especialmente útil para gestionar varios sitios web en la misma máquina o para proporcionar contenido personalizado según el método de acceso (por ejemplo, por IP o dominio).
En este artículo, demostraremos cómo configurar virtual hosts en una máquina virtual IaaS con Ubuntu 22.04. También habilitaremos HTTPS para conexiones seguras y usaremos archivos .htaccess
para implementar reglas de redirección. Ya seas desarrollador, administrador de sistemas o estudiante, esta guía te llevará paso a paso a implementar un servidor web de nivel profesional.
Apartados que se van a realizar:
Apartado 1: Configurar Virtual Host
- Al acceder la URL
vhost.<dominio>.com
se mostrará:
Has accedido a la página del examen
Soy [nombre].
- Al acceder por la ip de la MV mostrará
No se puede acceder por IP
Apartado 2: Permitir acceso HTTPS al nombre de dominio
- Permitir acceso HTTPS para el dominio del apartado anterior
Apartado 3: Configuración de redirección con .htaccess
- Al intentar acceder al recurso /redirección te redirige a la web del instituto. Se debe resolver con .htaccess
Configuración previa
Accedemos al siguiente enlace: Create a virtual machine - Microsoft Azure donde podremos crear una VM Linux gratuita.
Le daremos un nombre a la máquina, seleccionamos la región y el sistema a utilizar, en nuestro caso usaremos la versión más estable de Ubuntu, 22.04 LTS x64.
Respecto al tamaño seleccionado, aunque su costo mensual es de aproximadamente US$8.76, se encuentra dentro de los servicios gratuitos elegibles de Azure, por lo que no se me cobrará durante el periodo de uso
La configuración de acceso a la VM por defecto será la que usemos, al ser la más segura. El acceso se realizará por SSH, de modo que proporcionaremos un nombre de usuario y Azure nos genera una pareja de claves. Azure se queda con la clave pública y en el último paso nosotros nos descargamos la privada.
Por último, configuramos los puertos que queremos habilitar, en nuestro caso nos bastará con el 80 para HTTP, el 443 para conectarnos de forma segura con HTTPS y el 22 para la conexión SSH a la máquina.
Una vez configurado todo, como se ha dicho antes, para conectarnos necesitamos una clave privada que Azure nos genera. Nos la descargamos y la guardamos en un lugar seguro.
Revisamos toda la información y creamos la máquina, lo que puede tardar algunos minutos.
Una vez creada la máquina, podremos conectarnos a ella de varias maneras, la más común utilizando clientes como Putty.
Necesitaremos conocer nuestra IP; para ello, iremos a la página de inicio de Azure, donde podremos ver nuestra máquina en la sección “Recientes”.
Una vez accedemos al recurso, podemos ver la Dashboard con todas las configuraciones. En el centro de la pantalla podemos ver la dirección IP.
IP estática

Una vez tenemos nuestra IP, ya podemos abrir Putty para conectarnos a la máquina. Pero antes, tendremos que poner nuestra clave privada para autenticarnos.
⚠️Putty no soporta de forma nativa el formato .PEM, entonces lo primero que haremos sera convertir el archivo a formato .PPK (Putty Private Key). Para hacerlo utilizaremos la herramienta PUTTYgen que se debió instalar al instalar el paquete de Putty.
En la ventana de PUTTYgen pulsamos el boton «Load» y seleccionamos nuestro archivo .PEM
Una vez importada, hacemos click en “Save private key” y le damos un nombre con la extensión .ppk
Ahora que ya tenemos nuestra clave, volvemos a Putty.
En el menú de la izquierda, accedemos a Connection → SSH → Auth → Credentials y ponemos la clave privada que nos hemos descargado anteriormente.
Una vez tengamos la conexión preparada, le damos a “Open”. Es probable que aparezca una alerta de seguridad, si confías en la máquina, puedes aceptarla y continuar la conexión.
Cuando se abra la terminal, nos pedirá introducir el nombre de usuario que hemos configurado en Azure.
Si hemos hecho todo correctamente podremos ver la linea de comando de la sesion SSH. Ya estamos dentro de nuestra máquina.
Antes de comenzar con el primer ejercicio, es importante configurar el firewall interno de nuestra máquina para asegurar que solo los puertos necesarios estén abiertos.
El firewall interno controla el tráfico que puede entrar o salir de la máquina, protegiéndola de accesos no autorizados. Vamos a configurar UFW (Uncomplicated Firewall) para permitir solo los puertos 22 (SSH), 80 (HTTP) y 443 (HTTPS), y bloquear todos los demás.
Para ello, vamos a introducir los siguientes comandos:
sudo ufw allow http
sudo ufw allow ssh
sudo ufw allow https
Comprobaremos el estado del firewall utilizando “sudo bash” (para obtener priviliegios de administrador) y con el comando “ufw status”. Aparecerá desactivado, de modo que debemos activarlo con:
ufw enable
Ya tenemos el firewall configurado, ahora podemos empezar con el primer ejercicio.
Apartado 1: Configurar Virtual Host
En este primer apartado, configuraremos dos Virtual Hosts en Apache. Al acceder a vhost.<dominio>.com
, se mostrará el mensaje "Has accedido a la página del examen, Soy [nombre]". Al intentar acceder directamente mediante la IP de la máquina virtual, se mostrará el mensaje "No se puede acceder por IP".
Vamos a instalar Apache2, un servidor web ampliamente utilizado, para poder servir las páginas web en nuestra máquina virtual. Apache2 nos permitirá configurar los Virtual Hosts, gestionar el tráfico HTTP y servir el contenido web a través de los puertos adecuados (80 y 443).
La instalación se realizará mediante el comando apt
en Ubuntu, y luego habilitaremos el servicio para que se inicie automáticamente.
sudo apt install apache2
Aceptamos y esperamos a que se instale. Para habilitar Apache2 y asegurarnos de que se inicie automáticamente al arrancar la máquina, utilizamos el siguiente comando:
sudo systemctl enable apache2
Además, para iniciar el servicio inmediatamente después de la instalación, utilizamos:
sudo systemctl start apache2
Primera parte: Configuración de Virtual Host
Paso 1: Crear la carpeta htmlIP
La carpeta htmlIP
es donde vamos a almacenar los archivos que se mostrarán cuando alguien acceda a nuestra máquina virtual por su IP. Normalmente, Apache almacena los archivos web en /var/www/html
, pero en este caso queremos tener contenido diferente para las visitas que accedan usando la IP, por lo que creamos una nueva carpeta específica para ese propósito.
sudo mkdir /var/www/htmlIP
Paso 2: Crear los archivos index.html
- Para el dominio (vhost.<dominio>.com):
Apache, por defecto, sirve archivos desde la carpeta
/var/www/html
. Vamos a configurar esta carpeta para que muestre el mensaje adecuado cuando accedamos mediante el dominio.Ejecuta el siguiente comando para eliminar el archivo
index.html
(tiene ya contenido que no queremos):sudo rm /var/www/html/index.html
Luego, creamos un nuevo archivo
index.html
vacío en la misma ubicación:sudo nano /var/www/html/index.html
Dentro de este archivo, escribimos el siguiente mensaje:
<h1>Has accedido a la página del examen, Soy [nombre] </h1>
Para guardar el archivo y salir de nano, presiona:
Ctrl + O (para guardar).
Enter (para confirmar).
Ctrl + X (para salir).
Este archivo se mostrará cuando accedamos al dominio vhost.<dominio>.com
.
Para la IP (en la carpeta
htmlIP
):Ahora, queremos que las visitas que accedan a nuestra máquina usando su IP vean un mensaje diferente. Para esto, creamos un archivo
index.html
dentro de la carpetahtmlIP
que hemos creado previamente.sudo nano /var/www/htmlIP/index.html
Y agregamos el siguiente mensaje:
<h1>No se puede acceder por IP</h1>
Guardamos igual que antes. Este archivo será mostrado cuando alguien intente acceder a la máquina mediante su dirección IP.
Paso 3: Configurar los archivos .conf
de Apache
Copiar el archivo de configuración predeterminado:
Apache utiliza archivos de configuración
.conf
para definir cómo debe comportarse el servidor web. Para configurar los dos Virtual Hosts (uno para el dominio y otro para la IP), primero vamos a copiar el archivo de configuración predeterminado000-default.conf
a un nuevo archivo llamado001-ip.conf
:sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/001-ip.conf
Editar el archivo para el dominio:
Ahora vamos a configurar el primer Virtual Host para que cuando accedamos a través del dominio
vhost.<dominio>.com
, se sirvan los archivos desde/var/www/html
.Editamos el archivo
000-default.conf
para configurar el Virtual Host:sudo nano /etc/apache2/sites-available/000-default.conf
Dentro del archivo, buscamos la siguiente sección:
<VirtualHost *:80> DocumentRoot /var/www/html </VirtualHost>
Edita o añade el
ServerName
para que esté correctamente configurado para el dominiovhost.<dominio>.com
:<VirtualHost *:80> ServerName vhost.<dominio>.com DocumentRoot /var/www/html </VirtualHost>
Editar el archivo para la IP:
Ahora, editamos el archivo
001-ip.conf
para configurar el Virtual Host que se activará cuando se acceda a la máquina mediante su IP. Este Virtual Host debe servir los archivos desde la carpetahtmlIP
que hemos creado.sudo nano /etc/apache2/sites-available/001-ip.conf
- 💡En este archivo, el
DocumentRoot
debe apuntar a/var/www/htmlIP
para que, al acceder por la IP (ServerName), se sirva el contenido de esa carpeta. Asegúrate de que el archivo incluya esto: (deben coincidir mayúsculas)
Al usar la IP como ServerName
, Apache responde sirviendo el contenido ubicado en la carpeta especificada en el DocumentRoot
. Esto ocurre siempre que la solicitud llega a través de esa IP.
Paso 4: Activar los sitios y recargar Apache
- Activar los Virtual Hosts:
Ahora que hemos configurado los dos archivos
.conf
, debemos habilitarlos para que Apache los use. Para esto, utilizamos el comandoa2ensite
:sudo a2ensite 000-default.conf sudo a2ensite 001-ip.conf
Recargar Apache:
Después de habilitar los sitios, necesitamos recargar Apache para que los cambios tomen efecto. Usamos el siguiente comando:
sudo systemctl reload apache2
Con esto, hemos configurado correctamente los Virtual Hosts para que:
Al acceder a
vhost.<dominio>.com
, se muestre : Has accedido a la página del examen. Soy [nombre].Al acceder directamente por la IP de la máquina, se muestre el mensaje: "No se puede acceder por IP".
Segunda parte: Configurar el dominio
En esta parte, vamos a configurar el dominio para que apunte a la dirección IP pública de nuestra máquina virtual. En mi caso utilizaré Porkbun pues es mi proveedor de dominio, aunque el proceso es similar en otros proveedores.
Iremos a la gestión de dominios y a los ajustes DNS del dominio que tenemos contratado.
Allí podremos crear un registro de tipo A (registro que asocia un nombre de dominio con una dirección IP).
Una vez creado es probable que debamos esperar hasta varios minutos para que se propague el registro.
Ahora, podremos entrar en vhost.<dominio>.com y veremos el mensaje.
Del mismo modo, si probamos a acceder mediante la IP:
Apartado 2: Permitir acceso HTTPS al nombre de dominio
En esta segunda parte del ejercicio, lo que vamos a hacer es configurar HTTPS (acceso seguro a través de SSL) para el dominio que ya configuramos en el apartado anterior. HTTPS es un protocolo que asegura la comunicación entre el navegador del usuario y tu servidor, cifrando la información transmitida. Para ello, necesitamos generar un certificado SSL y configurar Apache para que use este certificado y pueda servir páginas a través de HTTPS.
Habilitar el módulo SSL en Apache
Apache necesita tener habilitado el módulo SSL para manejar conexiones HTTPS. Este módulo es el que permite cifrar la comunicación entre el servidor y el cliente.
Para habilitar el módulo SSL (y reiniciar Apache), utilizamos los siguientes comandos:
sudo a2enmod ssl sudo systemctl restart apache2
Generar el certificado SSL
Ahora que Apache puede manejar conexiones HTTPS, necesitamos un certificado SSL para poder cifrar la comunicación. Para generar un certificado SSL autofirmado (es decir, no emitido por una entidad certificadora externa), usamos el siguiente comando:
sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/examen.crt
💡Si prefieres, puedes usaropenssl
en lugar demake-ssl-cert
para generar el certificado SSL, lo cual es más común y compatible. En este caso, al estar en un entorno de pruebas, con este nos valdrá.El comando
make-ssl-cert
genera un certificado SSL autofirmado. El archivoexamen.crt
es el archivo del certificado que usaremos para habilitar HTTPS en nuestro servidor. En este caso, he utilizado el nombre de dominiovhost.<dominio>.com
, pero puedes ajustar el nombre del archivo según sea necesario. (Si nos pide nombre alternativo, no hace falta poner nada)💡Un certificado autofirmado no es reconocido por navegadores como "confiable" por defecto, ya que no es emitido por una autoridad certificadora (CA) oficial. Sin embargo, para este ejercicio, nos sirve para poder configurar y probar HTTPS en el servidor.💡Si necesitas que tu página sea accesible de forma segura y sin advertencias en los navegadores, puedes usar Let's Encrypt para obtener un certificado SSL gratuito. Puede serte útil este tutorial de Digital Ocean.Para asegurarnos de que el certificado se ha generado correctamente, vamos a la carpeta donde se almacenan los certificados en el sistema y verificamos que el archivo
examen.crt
exista.cd /etc/ssl/private ls -l
b008283e.0 -> examen.crt
: Este es un enlace simbólico que apunta al archivoexamen.crt
.Configurar el archivo de configuración de Apache para SSL
Ahora vamos a configurar Apache para que sirva contenido a través de HTTPS, mediante un archivo de configuración específico que tiene Apache para habilitar SSL. Vamos a copiar la configuración predeterminada para SSL y modificarla según nuestras necesidades.
cd /etc/apache2/sites-available sudo cp -a default-ssl.conf https-ssl.conf
Editar el archivo de configuración SSL
Ahora necesitamos editar el archivo de configuración para que Apache sepa qué certificado utilizar y para qué dominio configurarlo.
sudo nano /etc/apache2/sites-available/https-ssl.conf
Dentro del archivo, añadimos el ServerName con nuestro dominio:
Además, añadimos la siguiente linea para especificar la ubicación del archivo del certificado SSL que generamos anteriormente.
SSLCertificateFile /etc/ssl/private/examen.crt
La añadimos junto con el resto de configuraciones de SSL (IMPORTANTE AÑADIRLA DEBAJO)
Después de hacer estos cambios, guardamos el archivo y salimos.
Activar el sitio SSL para que Apache lo sirva:
sudo a2ensite https-ssl.conf sudo service apache2 restart
Con esto ya tendríamos terminado el segundo apartado y podemos comprobarlo accediendo a nuestra web utilizando HTTPS.
Apartado 3: Configuración de Redirección con .htaccess
En este último apartado, configuramos una redirección con .htaccess
para redirigir una ruta a cualquier página que queramos.
Hay varias formas de hacer redirecciones en un servidor web, como usar configuraciones en los archivos (.conf
), o modificar las reglas del servidor mediante archivos .htaccess
específicos en directorios. En este ejercicio, vamos a usar un archivo .htaccess
para realizar una redirección sencilla.
Crear la carpeta “redireccion”:
Primero, vamos a crear una carpeta llamada “redireccion” (o cualquiero otro nombre que queramos para la ruta) dentro del directorio
/var/www/html
.sudo mkdir /var/www/html/redireccion
Accedemos a la ruta y creamos el archivo .htaccess
cd /var/www/html/redireccion sudo nano .htaccess
Y dentro incluimos la siguiente línea para redirigir cualquier intento de acceder a
/redireccion
hacia la página que queramos, en mi caso usaré como ejemplo la página del IES Azarquiel.Redirect 301 /redireccion http://www.ies-azarquiel.es
💡El tipo de redirección 301 indica una redirección permanente. Otros códigos, como 302 y 307, indican redirecciones temporales.Guardamos el archivo con Ctrl + O y Enter, y salimos con Ctrl + X.
Habilitar .htaccess en Apache
Necesitamos asegurarnos de que Apache permita usar archivos
.htaccess
para configurar redirecciones. Para ello, debemos editar el archivo apache2.confsudo nano /etc/apache2/apache2.conf
Buscamos esta parte (bajando mucho) y editamos el archivo apache2.conf cambiando el “None” por “all” en AllowOverride
Esto permitirá que Apache lea y ejecute las reglas de
.htaccess
en los directorios dentro de/var/www/
, como el que hemos creado.Para finalizar, reiniciamos Apache para que se apliquen los cambios:
sudo systemctl restart apache2
Ahora podemos probar nuestra redirección entrando en http://vhost.<dominio>.com/redireccion, en mi caso he añadido un botón en el HTML de la página que nos lleva a la ruta:
<h1>Has accedido a la página del examen, Soy Alex</h1>
<a href="/redireccion">
<button>Redireccion</button>
</a>
Conclusión
En este trabajo, hemos aprendido a desplegar y configurar un servidor web en Ubuntu, configurando Virtual Hosts para gestionar múltiples sitios, habilitando HTTPS para mayor seguridad, y utilizando redirecciones con .htaccess. Estos pasos nos permiten optimizar el acceso a nuestros servicios, y también nos ayudan a proporcionar un servicio más seguro.
Espero que esta guía te haya sido útil ;)
Subscribe to my newsletter
Read articles from Alejandro Isabel directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
