<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[alexisabels’ blog]]></title><description><![CDATA[fresh blog]]></description><link>https://blog.alexisabel.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 21:01:11 GMT</lastBuildDate><atom:link href="https://blog.alexisabel.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Despliegue y configuración de Servidor Web en VM Ubuntu IaaS: Virtual Hosts, HTTPS, y redirección]]></title><description><![CDATA[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 d...]]></description><link>https://blog.alexisabel.com/virtual-host</link><guid isPermaLink="true">https://blog.alexisabel.com/virtual-host</guid><category><![CDATA[https]]></category><category><![CDATA[Virtual Host]]></category><category><![CDATA[Ubuntu]]></category><category><![CDATA[Azure]]></category><category><![CDATA[vm]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Alejandro Isabel]]></dc:creator><pubDate>Fri, 13 Dec 2024 15:53:02 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1734104985246/0c6a5072-f3af-44a9-97e9-ecef2afbcf0a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cuando se alojan múltiples sitios web o servicios en un solo servidor, los <strong>virtual hosts</strong> 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).</p>
<p>En este artículo, demostraremos cómo configurar virtual hosts en una máquina virtual IaaS con <strong>Ubuntu 22.04</strong>. También habilitaremos HTTPS para conexiones seguras y usaremos archivos <code>.htaccess</code> 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.</p>
<p><strong>Apartados que se van a realizar:</strong></p>
<p><strong>Apartado 1: Configurar Virtual Host</strong></p>
<ul>
<li>Al acceder la URL <code>vhost.&lt;dominio&gt;.com</code> se mostrará:</li>
</ul>
<pre><code class="lang-xml">Has accedido a la página del examen
Soy [nombre].
</code></pre>
<ul>
<li>Al acceder por la ip de la MV mostrará</li>
</ul>
<pre><code class="lang-xml">No se puede acceder por IP
</code></pre>
<p><strong>Apartado 2: Permitir acceso HTTPS al nombre de dominio</strong></p>
<ul>
<li>Permitir acceso HTTPS para el dominio del apartado anterior</li>
</ul>
<p><strong>Apartado 3: Configuración de redirección con .htaccess</strong></p>
<ul>
<li>Al intentar acceder al recurso /redirección te redirige a la web del instituto. Se debe resolver con .htaccess</li>
</ul>
<hr />
<h2 id="heading-configuracion-previa">Configuración previa</h2>
<p>Accedemos al siguiente enlace: <a target="_blank" href="https://portal.azure.com/#create/microsoft.freeaccountvirtualmachine-linux">Create a virtual machine - Microsoft Azure</a> donde podremos crear una VM Linux gratuita.</p>
<p>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.</p>
<p>Respecto al tamaño seleccionado, aunque su costo mensual es de aproximadamente <strong>US$8.76</strong>, se encuentra dentro de los <strong>servicios gratuitos elegibles</strong> de Azure, por lo que no se me cobrará durante el periodo de uso</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734090392985/0e537d7d-00b5-458b-8e14-23c571ab00af.png" alt class="image--center mx-auto" /></p>
<p>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.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734090562566/6764fcd0-b5d1-44bc-a7d8-268a55c6d048.png" alt class="image--center mx-auto" /></p>
<p>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.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734090676619/a39d55b9-4490-44b1-ad0b-c3f14ee50c8f.png" alt class="image--center mx-auto" /></p>
<p>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.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734090889630/9dbe62f0-b6b0-4f05-bafd-ffec6e104f9f.png" alt class="image--center mx-auto" /></p>
<p>Revisamos toda la información y creamos la máquina, lo que puede tardar algunos minutos.</p>
<p>Una vez creada la máquina, podremos conectarnos a ella de varias maneras, la más común utilizando clientes como <a target="_blank" href="https://www.putty.org/">Putty</a>.</p>
<p>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”.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734091447130/206ebdc5-cafb-4b11-863b-5affb4d491f5.png" alt class="image--center mx-auto" /></p>
<p>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.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734091895002/891f9361-b4a0-41a6-9d94-1e0483e8dc09.png" alt class="image--center mx-auto" /></p>
<details><summary>IP estática</summary><div data-type="detailsContent">La IP que nos genera Azure por defecto es dinámica, de modo que si reiniciamos la máquina ésta cambiará. Para evitar esto, hacemos click en la IP y nos llevará a la configuración de IP, donde podremos cambiar a IP estática para tener una reservada para nosotros. Le damos a guardar (es posible que se reinicie la máquina)</div></details>

<p>![](https://cdn.hashnode.com/res/hashnode/image/upload/v1734092053487/901d86f8-f25a-4a17-b4dc-7e809581583a.png align="center")</p>
<p>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.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734092218014/dc669560-00da-4134-9d0e-f28857a8a761.png" alt class="image--center mx-auto" /></p>
<p><em>⚠️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.</em></p>
<p>En la ventana de PUTTYgen pulsamos el boton «Load» y seleccionamos nuestro archivo .PEM</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Si no ves el archivo .pem, asegúrate de que estás configurando el explorador para que muestre todos los archivos. Esto lo puedes hacer normalmente en el menú de la esquina inferior derecha</div>
</div>

<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734092765542/df65ed35-b34b-4f36-beb7-ea6c4604a620.png" alt class="image--center mx-auto" /></p>
<p>Una vez importada, hacemos click en “Save private key” y le damos un nombre con la extensión .ppk</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734092864649/7e9e177c-5d67-49af-9ced-53e7fbf0ee45.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Aunque conectarse de este modo parezca engorroso, es infinitamente más seguro que utilizar una contraseña creada por nosotros.</div>
</div>

<p>Ahora que ya tenemos nuestra clave, volvemos a Putty.</p>
<p>En el menú de la izquierda, accedemos a Connection → SSH → Auth → Credentials y ponemos la clave privada que nos hemos descargado anteriormente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734092294040/5b1d1d79-5c1f-4eaa-b721-7bf6e7e94b0b.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Es recomendable volver al menú principal de Putty y guardar la sesión para no tener que configurar todo cuando queramos conectarnos en otro momento</div>
</div>

<p>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.</p>
<p>Cuando se abra la terminal, nos pedirá introducir el nombre de usuario que hemos configurado en Azure.</p>
<p>Si hemos hecho todo correctamente podremos ver la linea de comando de la sesion SSH. Ya estamos dentro de nuestra máquina.</p>
<p>Antes de comenzar con el primer ejercicio, es importante configurar el <strong>firewall interno</strong> de nuestra máquina para asegurar que solo los puertos necesarios estén abiertos.</p>
<p>El <strong><em>firewall</em></strong> interno controla el tráfico que puede entrar o salir de la máquina, protegiéndola de accesos no autorizados. Vamos a configurar <strong>UFW</strong> (Uncomplicated Firewall) para permitir solo los puertos <strong>22</strong> (SSH), <strong>80</strong> (HTTP) y <strong>443</strong> (HTTPS), y bloquear todos los demás.</p>
<p>Para ello, vamos a introducir los siguientes comandos:</p>
<pre><code class="lang-bash">sudo ufw allow http
sudo ufw allow ssh
sudo ufw allow https
</code></pre>
<p>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:</p>
<pre><code class="lang-bash">ufw <span class="hljs-built_in">enable</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734093386612/21191fd5-b872-4c63-a4cc-681a9fe2cb25.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Asegúrate de permitir el puerto <strong>22 (SSH)</strong> antes de habilitar <strong>UFW</strong> para evitar bloquearte fuera de la máquina. Si no lo configuras primero, perderás el acceso remoto y no podrás conectarte nuevamente.</div>
</div>

<p>Ya tenemos el firewall configurado, ahora podemos empezar con el primer ejercicio.</p>
<hr />
<h2 id="heading-apartado-1-configurar-virtual-host"><strong>Apartado 1: Configurar Virtual Host</strong></h2>
<p>En este primer apartado, configuraremos dos Virtual Hosts en Apache. Al acceder a <code>vhost.&lt;dominio&gt;.com</code>, 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".</p>
<p>Vamos a instalar <strong>Apache2</strong>, 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).</p>
<p>La instalación se realizará mediante el comando <code>apt</code> en Ubuntu, y luego habilitaremos el servicio para que se inicie automáticamente.</p>
<pre><code class="lang-bash">sudo apt install apache2
</code></pre>
<p>Aceptamos y esperamos a que se instale. Para habilitar <strong>Apache2</strong> y asegurarnos de que se inicie automáticamente al arrancar la máquina, utilizamos el siguiente comando:</p>
<pre><code class="lang-bash">sudo systemctl <span class="hljs-built_in">enable</span> apache2
</code></pre>
<p>Además, para iniciar el servicio inmediatamente después de la instalación, utilizamos:</p>
<pre><code class="lang-bash">sudo systemctl start apache2
</code></pre>
<h3 id="heading-primera-parte-configuracion-de-virtual-host">Primera parte: Configuración de Virtual Host</h3>
<h3 id="heading-paso-1-crear-la-carpeta-htmlip"><strong>Paso 1:</strong> Crear la carpeta <code>htmlIP</code></h3>
<p>La carpeta <code>htmlIP</code> es donde vamos a almacenar los archivos que se mostrarán cuando alguien acceda a nuestra máquina virtual <strong>por su IP</strong>. Normalmente, Apache almacena los archivos web en <code>/var/www/html</code>, 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.</p>
<pre><code class="lang-bash">sudo mkdir /var/www/htmlIP
</code></pre>
<h3 id="heading-paso-2-crear-los-archivos-indexhtml">Paso 2: Crear los archivos <code>index.html</code></h3>
<ol>
<li><strong>Para el dominio (</strong><a target="_blank" href="http://vhost.examen538406.tridentemarketingsolutions.com"><strong>vhost.&lt;dominio&gt;.com</strong></a><strong>):</strong></li>
</ol>
<ul>
<li><p>Apache, por defecto, sirve archivos desde la carpeta <code>/var/www/html</code>. Vamos a configurar esta carpeta para que muestre el mensaje adecuado cuando accedamos mediante el dominio.</p>
</li>
<li><p>Ejecuta el siguiente comando para eliminar el archivo <code>index.html</code> (tiene ya contenido que no queremos):</p>
</li>
<li><pre><code class="lang-bash">      sudo rm /var/www/html/index.html
</code></pre>
</li>
<li><p>Luego, creamos un nuevo archivo <code>index.html</code> vacío en la misma ubicación:</p>
<pre><code class="lang-bash">  sudo nano /var/www/html/index.html
</code></pre>
</li>
<li><p>Dentro de este archivo, escribimos el siguiente mensaje:</p>
</li>
<li><pre><code class="lang-xml">      <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Has accedido a la página del examen, Soy [nombre] <span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
</code></pre>
</li>
</ul>
<p>Para guardar el archivo y salir de <strong>nano</strong>, presiona:</p>
<ul>
<li><p><strong>Ctrl + O</strong> (para guardar).</p>
</li>
<li><p><strong>Enter</strong> (para confirmar).</p>
</li>
<li><p><strong>Ctrl + X</strong> (para salir).</p>
</li>
</ul>
<p>Este archivo se mostrará cuando accedamos al dominio <a target="_blank" href="http://vhost.examen538406.tridentemarketingsolutions.com"><code>vhost.&lt;dominio&gt;.com</code></a>.</p>
<ol start="2">
<li><p><strong>Para la IP (en la carpeta</strong> <code>htmlIP</code>):</p>
<ul>
<li><p>Ahora, queremos que las visitas que accedan a nuestra máquina usando su <strong>IP</strong> vean un mensaje diferente. Para esto, creamos un archivo <code>index.html</code> dentro de la carpeta <code>htmlIP</code> que hemos creado previamente.</p>
</li>
<li><pre><code class="lang-bash">      sudo nano /var/www/htmlIP/index.html
</code></pre>
</li>
<li><p>Y agregamos el siguiente mensaje:</p>
<pre><code class="lang-xml">  <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>No se puede acceder por IP<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
</code></pre>
<p>  Guardamos igual que antes. Este archivo será mostrado cuando alguien intente acceder a la máquina mediante su dirección IP.</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-paso-3-configurar-los-archivos-conf-de-apache"><strong>Paso 3: Configurar los archivos</strong> <code>.conf</code> <strong>de Apache</strong></h3>
<ol start="3">
<li><p><strong>Copiar el archivo de configuración predeterminado</strong>:</p>
<ul>
<li><p>Apache utiliza archivos de configuración <code>.conf</code> 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 predeterminado <code>000-default.conf</code> a un nuevo archivo llamado <code>001-ip.conf</code>:</p>
</li>
<li><pre><code class="lang-bash">      sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/001-ip.conf
</code></pre>
</li>
</ul>
</li>
<li><p><strong>Editar el archivo para el dominio</strong>:</p>
</li>
</ol>
<ul>
<li><p>Ahora vamos a configurar el primer Virtual Host para que cuando accedamos a través del dominio <a target="_blank" href="http://vhost.examen538406.tridentemarketingsolutions.com"><code>vhost.&lt;dominio&gt;.com</code></a>, se sirvan los archivos desde <code>/var/www/html</code>.</p>
</li>
<li><p>Editamos el archivo <code>000-default.conf</code> para configurar el Virtual Host:</p>
</li>
<li><pre><code class="lang-bash">      sudo nano /etc/apache2/sites-available/000-default.conf
</code></pre>
<p>  Dentro del archivo, buscamos la siguiente sección:</p>
<pre><code class="lang-yaml">  <span class="hljs-string">&lt;VirtualHost</span> <span class="hljs-string">*:80&gt;</span>
      <span class="hljs-string">DocumentRoot</span> <span class="hljs-string">/var/www/html</span>
  <span class="hljs-string">&lt;/VirtualHost&gt;</span>
</code></pre>
<p>  Edita o añade el <code>ServerName</code> para que esté correctamente configurado para el dominio <a target="_blank" href="http://vhost.examen538406.tridentemarketingsolutions.com"><code>vhost.&lt;dominio&gt;.com</code></a>:</p>
<pre><code class="lang-yaml">  <span class="hljs-string">&lt;VirtualHost</span> <span class="hljs-string">*:80&gt;</span> 
      <span class="hljs-string">ServerName</span> <span class="hljs-string">vhost.&lt;dominio&gt;.com</span> 
      <span class="hljs-string">DocumentRoot</span> <span class="hljs-string">/var/www/html</span> 
  <span class="hljs-string">&lt;/VirtualHost&gt;</span>
</code></pre>
</li>
</ul>
<ol start="2">
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734094806451/a0441212-71d4-407d-8379-a2649b7163c9.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Editar el archivo para la IP</strong>:</p>
<ul>
<li><p>Ahora, editamos el archivo <code>001-ip.conf</code> 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 carpeta <code>htmlIP</code> que hemos creado.</p>
<pre><code class="lang-bash">  sudo nano /etc/apache2/sites-available/001-ip.conf
</code></pre>
</li>
<li><div data-node-type="callout">
  <div data-node-type="callout-emoji">💡</div>
  <div data-node-type="callout-text">En este archivo, el <code>DocumentRoot</code> debe apuntar a <code>/var/www/htmlIP</code> para que, al acceder por la IP (ServerName), se sirva el contenido de esa carpeta.</div>
  </div>
</li>
<li><p>Asegúrate de que el archivo incluya esto: (deben coincidir mayúsculas)</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734096166397/3d869a83-f8eb-441f-aa16-2d71d7c246a6.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
</ol>
<p>    Al usar la IP como <code>ServerName</code>, Apache responde sirviendo el contenido ubicado en la carpeta especificada en el <code>DocumentRoot</code>. Esto ocurre siempre que la solicitud llega a través de esa IP.</p>
<h3 id="heading-paso-4-activar-los-sitios-y-recargar-apache">Paso 4: Activar los sitios y recargar Apache</h3>
<ol>
<li><strong>Activar los Virtual Hosts</strong>:</li>
</ol>
<ul>
<li><p>Ahora que hemos configurado los dos archivos <code>.conf</code>, debemos habilitarlos para que Apache los use. Para esto, utilizamos el comando <code>a2ensite</code>:</p>
<pre><code class="lang-bash">  sudo a2ensite 000-default.conf
  sudo a2ensite 001-ip.conf
</code></pre>
</li>
</ul>
<ol start="2">
<li><p><strong>Recargar Apache</strong>:</p>
<ul>
<li><p>Después de habilitar los sitios, necesitamos recargar Apache para que los cambios tomen efecto. Usamos el siguiente comando:</p>
<pre><code class="lang-bash">  sudo systemctl reload apache2
</code></pre>
</li>
</ul>
</li>
</ol>
<p>Con esto, hemos configurado correctamente los Virtual Hosts para que:</p>
<ul>
<li><p>Al acceder a <a target="_blank" href="http://vhost.examen538406.tridentemarketingsolutions.com"><code>vhost.&lt;dominio&gt;.com</code></a>, se muestre : Has accedido a la página del examen. Soy [nombre].</p>
</li>
<li><p>Al acceder directamente por la IP de la máquina, se muestre el mensaje: <strong>"No se puede acceder por IP"</strong>.</p>
</li>
</ul>
<h3 id="heading-segunda-parte-configurar-el-dominio">Segunda parte: Configurar el dominio</h3>
<p>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é <strong>Porkbun</strong> pues es mi proveedor de dominio, aunque el proceso es similar en otros proveedores.</p>
<p>Iremos a la gestión de dominios y a los ajustes DNS del dominio que tenemos contratado.</p>
<p>Allí podremos crear un registro de tipo A (registro que asocia un nombre de dominio con una dirección IP).</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734095799914/63602e6c-0934-419a-abca-329838bab5cd.png" alt class="image--center mx-auto" /></p>
<p>Una vez creado es probable que debamos esperar hasta varios minutos para que se propague el registro.</p>
<p>Ahora, podremos entrar en vhost.&lt;dominio&gt;.com y veremos el mensaje.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734103666023/844c4a37-bc61-4df4-8139-ca09162999df.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Las tildes no se muestran correctamente porque el archivo no está guardado en codificación <strong>UTF-8</strong>.</div>
</div>

<p>Del mismo modo, si probamos a acceder mediante la IP:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734096580220/8854362d-96f9-4fb9-9238-d951a95632b4.png" alt class="image--center mx-auto" /></p>
<hr />
<h2 id="heading-apartado-2-permitir-acceso-https-al-nombre-de-dominio"><strong>Apartado 2:</strong> Permitir acceso HTTPS al nombre de dominio</h2>
<p>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.</p>
<ol>
<li><h4 id="heading-habilitar-el-modulo-ssl-en-apache"><strong>Habilitar el módulo SSL en Apache</strong></h4>
<p> 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.</p>
<p> Para habilitar el módulo SSL (y reiniciar Apache), utilizamos los siguientes comandos:</p>
<pre><code class="lang-bash"> sudo a2enmod ssl
 sudo systemctl restart apache2
</code></pre>
</li>
<li><p><strong>Generar el certificado SSL</strong></p>
<p> 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:</p>
<pre><code class="lang-bash"> sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/examen.crt
</code></pre>
 <div data-node-type="callout">
 <div data-node-type="callout-emoji">💡</div>
 <div data-node-type="callout-text">Si prefieres, puedes usar <code>openssl</code> en lugar de <code>make-ssl-cert</code> 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á.</div>
 </div>

<p> El comando <code>make-ssl-cert</code> genera un certificado SSL autofirmado. El archivo <code>examen.crt</code> es el archivo del certificado que usaremos para habilitar HTTPS en nuestro servidor. En este caso, he utilizado el nombre de dominio <a target="_blank" href="http://examen538406.tridentemarketingsolutions.com"><code>vhost.&lt;dominio&gt;.com</code></a>, pero puedes ajustar el nombre del archivo según sea necesario. (Si nos pide nombre alternativo, no hace falta poner nada)</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734097123107/bf2eadd0-d5e6-4d70-81f8-c530be10cebd.png" alt class="image--center mx-auto" /></p>
 <div data-node-type="callout">
 <div data-node-type="callout-emoji">💡</div>
 <div data-node-type="callout-text">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.</div>
 </div>

 <div data-node-type="callout">
 <div data-node-type="callout-emoji">💡</div>
 <div data-node-type="callout-text">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 <a target="_self" href="https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04-es">este tutorial de Digital Ocean</a>.</div>
 </div>

<p> 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 <code>examen.crt</code> exista.</p>
<pre><code class="lang-bash"> <span class="hljs-built_in">cd</span> /etc/ssl/private
 ls -l
</code></pre>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734097275759/bd3410ae-7419-4f28-bcb7-da7605dc0ac1.png" alt class="image--center mx-auto" /></p>
<p> <code>b008283e.0 -&gt; examen.crt</code>: Este es un enlace simbólico que apunta al archivo <code>examen.crt</code>.</p>
</li>
<li><h4 id="heading-configurar-el-archivo-de-configuracion-de-apache-para-ssl"><strong>Configurar el archivo de configuración de Apache para SSL</strong></h4>
<p> 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.</p>
<pre><code class="lang-bash"> <span class="hljs-built_in">cd</span> /etc/apache2/sites-available
 sudo cp -a default-ssl.conf https-ssl.conf
</code></pre>
</li>
<li><h4 id="heading-editar-el-archivo-de-configuracion-ssl"><strong>Editar el archivo de configuración SSL</strong></h4>
<p> Ahora necesitamos editar el archivo de configuración para que Apache sepa qué certificado utilizar y para qué dominio configurarlo.</p>
<pre><code class="lang-bash"> sudo nano /etc/apache2/sites-available/https-ssl.conf
</code></pre>
<p> Dentro del archivo, añadimos el ServerName con nuestro dominio:</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734102064234/16986c24-574a-4723-b499-0524de9d4d9a.png" alt class="image--center mx-auto" /></p>
<p> Además, añadimos la siguiente linea para especificar la ubicación del archivo del certificado SSL que generamos anteriormente.</p>
<pre><code class="lang-yaml"> <span class="hljs-string">SSLCertificateFile</span> <span class="hljs-string">/etc/ssl/private/examen.crt</span>
</code></pre>
<p> La añadimos junto con el resto de configuraciones de SSL (IMPORTANTE AÑADIRLA DEBAJO)</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734102052592/c21bab79-7251-4d44-a22d-2360eac44e9b.png" alt class="image--center mx-auto" /></p>
<p> Después de hacer estos cambios, guardamos el archivo y salimos.</p>
</li>
<li><p><strong>Activar el sitio SSL</strong> para que Apache lo sirva:</p>
<pre><code class="lang-bash"> sudo a2ensite https-ssl.conf
 sudo service apache2 restart
</code></pre>
<p> Con esto ya tendríamos terminado el segundo apartado y podemos comprobarlo accediendo a nuestra web utilizando HTTPS.</p>
</li>
</ol>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734103705784/1adee3d3-6d1b-4438-a4af-ce83d3018047.png" alt class="image--center mx-auto" /></p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">El certificado autofirmado no es emitido por una autoridad certificadora (CA) confiable, por lo que los navegadores no lo reconocen como seguro. Por eso aparece un mensaje de “No seguro”. Los certificados autofirmados solo garantizan la autenticidad del servidor, pero no su confianza pública.</div>
</div>

<hr />
<h2 id="heading-apartado-3-configuracion-de-redireccion-con-htaccess"><strong>Apartado 3: Configuración de Redirección con .htaccess</strong></h2>
<p>En este último apartado, configuramos una redirección con <code>.htaccess</code> para redirigir una ruta a cualquier página que queramos.</p>
<p>Hay varias formas de hacer redirecciones en un servidor web, como usar configuraciones en los archivos (<code>.conf</code>), o modificar las reglas del servidor mediante archivos <code>.htaccess</code> específicos en directorios. En este ejercicio, vamos a usar un archivo <code>.htaccess</code> para realizar una redirección sencilla.</p>
<ol>
<li><p><strong>Crear la carpeta “redireccion”</strong>:</p>
<p> Primero, vamos a crear una carpeta llamada “redireccion” (o cualquiero otro nombre que queramos para la ruta) dentro del directorio <code>/var/www/html</code>.</p>
<pre><code class="lang-bash"> sudo mkdir /var/www/html/redireccion
</code></pre>
</li>
<li><p><strong>Accedemos a la ruta y creamos el archivo .htaccess</strong></p>
<pre><code class="lang-bash"> <span class="hljs-built_in">cd</span> /var/www/html/redireccion
 sudo nano .htaccess
</code></pre>
<p> Y dentro incluimos la siguiente línea para redirigir cualquier intento de acceder a <code>/redireccion</code> hacia la página que queramos, en mi caso usaré como ejemplo la página del IES Azarquiel.</p>
<pre><code class="lang-yaml"> <span class="hljs-string">Redirect</span> <span class="hljs-number">301</span> <span class="hljs-string">/redireccion</span> <span class="hljs-string">http://www.ies-azarquiel.es</span>
</code></pre>
 <div data-node-type="callout">
 <div data-node-type="callout-emoji">💡</div>
 <div data-node-type="callout-text">El tipo de redirección <strong>301</strong> indica una redirección <strong>permanente</strong>. Otros códigos, como <strong>302</strong> y <strong>307</strong>, indican redirecciones <strong>temporales</strong>.</div>
 </div>

<p> Guardamos el archivo con Ctrl + O y Enter, y salimos con Ctrl + X.</p>
</li>
<li><p><strong>Habilitar .htaccess en Apache</strong></p>
<p> Necesitamos asegurarnos de que Apache permita usar archivos <code>.htaccess</code> para configurar redirecciones. Para ello, debemos editar el archivo apache2.conf</p>
<pre><code class="lang-bash"> sudo nano /etc/apache2/apache2.conf
</code></pre>
<p> Buscamos esta parte (bajando mucho) y editamos el archivo apache2.conf cambiando el “None” por “all” en AllowOverride</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734103324282/f64ec404-d3ca-4927-acda-a5ea9f7fe6b2.png" alt class="image--center mx-auto" /></p>
<p> Esto permitirá que Apache lea y ejecute las reglas de <code>.htaccess</code> en los directorios dentro de<code>/var/www/</code>, como el que hemos creado.</p>
<p> Para finalizar, reiniciamos Apache para que se apliquen los cambios:</p>
<pre><code class="lang-bash"> sudo systemctl restart apache2
</code></pre>
</li>
</ol>
<p>Ahora podemos probar nuestra redirección entrando en <a target="_blank" href="http://vhost.alexisabel.com/redireccion">http://vhost.&lt;dominio&gt;.com/redireccion</a>, en mi caso he añadido un botón en el HTML de la página que nos lleva a la ruta:</p>
<pre><code class="lang-xml">
<span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Has accedido a la página del examen, Soy Alex<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
 <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"/redireccion"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">button</span>&gt;</span>Redireccion<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1734104366409/462ce62b-920c-4376-935f-7ffc91c25666.gif" alt class="image--center mx-auto" /></p>
<h1 id="heading-conclusion">Conclusión</h1>
<p>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.</p>
<p>Espero que esta guía te haya sido útil ;)</p>
]]></content:encoded></item></channel></rss>