CodeGym /Cursos /Docker SELF /Configuración de hosts virtuales

Configuración de hosts virtuales

Docker SELF
Nivel 7 , Lección 1
Disponible

Configuración de hosts virtuales

1. ¿Qué son los hosts virtuales?

Imagina que abres un café acogedor. La mayoría de los clientes vienen por café ☕, pero a veces alguien pide té 🍵. En lugar de abrir un lugar separado para los amantes del té, simplemente asignas un pequeño rincón para ellos. En el mundo de los servidores web, este concepto se llama hosts virtuales. Permiten que tu servidor maneje múltiples sitios (con diferentes dominios), manteniendo un solo servidor físico.

Tipos de hosts virtuales

  1. Basados en direcciones IP — cada sitio recibe su propia dirección IP única. Es como una zona VIP en un concierto: cada cliente con entrada VIP obtiene su asiento.
  2. Basados en nombres de dominio — varios sitios pueden compartir una sola dirección IP. Aquí el servidor usa el nombre del host (nombre de dominio) de la solicitud del cliente para entender qué sitio debe mostrar. Esta es una opción más común y conveniente para la mayoría de los proyectos.

2. Configuración de un host virtual en Nginx

1. Creación de un nuevo host virtual

Para configurar un host virtual, primero necesitas crear un archivo de configuración. Este archivo contiene información sobre cómo el servidor debe manejar las solicitudes para un dominio específico.

Creemos un archivo para nuestro sitio, por ejemplo, example.com:

sudo nano /etc/nginx/sites-available/example.com

Agregamos el siguiente bloque de configuración:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Revisemos el código por partes:

  • listen 80;: Indica que el servidor escuchará el puerto 80 (utilizado por defecto para HTTP).
  • server_name example.com www.example.com;: Define a qué nombres de dominio debe responder el servidor.
  • root /var/www/example.com;: La directiva indica la carpeta raíz donde se almacenan los archivos del sitio.
  • index index.html;: Especifica el archivo que se utilizará como "página principal" del sitio.
  • location / { try_files $uri $uri/ =404; }: Configuración de enrutamiento de solicitudes. Si no se encuentra el archivo o directorio, se devuelve el error 404.

2. Activación de la configuración

Ahora necesitamos "activar" nuestro host virtual. En Nginx, esto se hace mediante enlaces simbólicos:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Luego verificamos que no haya errores en la configuración:

sudo nginx -t

Si todo está correcto, reiniciamos el servidor:

sudo systemctl reload nginx

3. Verificación del funcionamiento

Creemos una carpeta para los archivos del sitio:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

Agregamos el siguiente código HTML simple:

<h1>¡Bienvenido a example.com!</h1>
<p>Tu servidor Nginx está listo para servir.</p>

Guardamos el archivo y luego lo abrimos en el navegador: http://example.com. Si ves el mensaje de bienvenida, ¡entonces el host virtual está funcionando!

4. Enlaces simbólicos en Linux

Los enlaces simbólicos (o soft links, symlinks) son objetos especiales de archivo que apuntan a otro archivo o directorio. Funcionan como "accesos directos" en Windows, permitiendo acceder al archivo o carpeta de destino a través de una ruta alternativa.

Los enlaces simbólicos contienen la ruta al objeto original, no el objeto en sí. Si el archivo o carpeta original se mueve o elimina, el enlace se convierte en un "enlace roto", ya que ya no apunta a un objeto existente.

Comando para crear un enlace simbólico:

ln -s target link_name
  • target — la ruta al objeto original.
  • link_name — el nombre del enlace.

Ejemplo:

ln -s /var/log/syslog log_link

Ahora, mediante log_link puedes acceder al archivo /var/log/syslog.

Aplicaciones:

  • Simplificación de la navegación.
  • Creación de puntos de acceso alternativos a archivos.
  • Organización de directorios.

3. Configuración de un host virtual en Apache

1. Creación de archivo de configuración

Apache utiliza un enfoque diferente. Aquí las configuraciones de los hosts virtuales están en la carpeta /etc/apache2/sites-available/. Creamos un archivo para nuestro sitio:

sudo nano /etc/apache2/sites-available/example.com.conf

Agregamos el siguiente código:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com

    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Explicación breve:

  • <VirtualHost *:80>: Indica que la configuración se aplica a todas las solicitudes en el puerto 80.
  • ServerName y ServerAlias: Definen el nombre de dominio principal y los adicionales para el sitio.
  • DocumentRoot: Indica la carpeta raíz del sitio.
  • <Directory>: Bloque que define los permisos de acceso y el comportamiento para el directorio especificado.

2. Activación de la configuración

Para activar la configuración, usamos el comando:

sudo a2ensite example.com.conf

Reiniciamos el servidor para que los cambios surtan efecto:

sudo systemctl restart apache2

3. Comprobación del funcionamiento

Nuevamente, creamos una carpeta y un archivo para el sitio:

sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html

Lo llenamos con el siguiente contenido:

<h1>¡Bienvenido a example.com en Apache!</h1>

Guardamos y abrimos en el navegador: http://example.com. Si ves la página de bienvenida — ¡felicidades, has configurado un host virtual en Apache!


4. Verificación y gestión de múltiples hosts

Configuración de un segundo host virtual

Supongamos que quieres servir un segundo sitio: test.com. El proceso es el mismo:

  1. Creas un nuevo archivo de configuración.
  2. Defines un nombre de dominio único y una carpeta raíz.
  3. Activas la configuración y reinicias el servidor.

Para Nginx:

sudo nano /etc/nginx/sites-available/test.com
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx

Para Apache:

sudo nano /etc/apache2/sites-available/test.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2

Depuración de problemas

Si tus hosts virtuales no funcionan, empieza por verificar los errores. Por ejemplo:

  • Para Nginx:

      sudo tail -f /var/log/nginx/error.log
    
  • Para Apache:

      sudo tail -f /var/log/apache2/error.log
    

También puedes usar el comando curl para probar el sitio directamente:

curl -I http://example.com

¡Ahora puedes configurar hosts virtuales y ejecutar múltiples sitios en un solo servidor! De la mano con esto va la configuración de HTTPS, para que tus sitios sean seguros. Pero eso ya es tema para la próxima lección.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION