Page cover

Virtualhosts

Un VirtualHost (o servidor virtual) es un concepto utilizado en servidores web para permitir la configuración de varios sitios web en una única instancia del servidor.

La necesidad de VirtualHosts surge porque un servidor web puede tener múltiples sitios web alojados en la misma dirección IP, y es necesario diferenciar entre ellos para dirigir correctamente las solicitudes entrantes. Como ya sabrás, hay dos tipos de Vhost:

  • Basados en dominios

  • Basados en IPs.

Recuerda que en el contexto de http, cada bloque server, como hemos visto, implica un VirtualHost.

Nginx serverhosts

Vamos a configurar un virtualhost de cero en nginx:

Paso 1: Crear el directorio del sitio web

Primero, deberás crear un directorio para almacenar los archivos de tu sitio web:

sudo mkdir -p /var/www/alex.com/html
sudo chmod -R 755 /var/www/alex.com

Paso 2: Asignar propiedad del directorio

Asegúrate de que el directorio pertenece al usuario correcto:

sudo chown -R $USER:$USER /var/www/alex.com/html

Paso 3: Crear un archivo de configuración de Nginx

Crea un nuevo archivo de configuración para tu virtual host:

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

Incluye la siguiente configuración básica:

server {
    #Puerto de escucha, por ahora HTTP
    #Otro ejemplo -> listen 127.0.0.1:8080;
    listen 80;
    #Nombre del servidor + www
    server_name alex.com www.alex.com;
    
    #Localización de los archivos web antes creados y del nombre concreto de la pagina de inicio
    location / {
        root /var/www/alex.com/html;
        index index.html index.htm;
    }
    
    
    #Configuración de páginas de error (opcional)
    error_page 404 /404.html;
    location = /404.html {
        root /var/www/alex.com/html;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/alex.com/html;
    }
}

Recuerda que la diferencia entre el "-available" y el "-enabled" es que en un lado tienen que ir los que quieras guardar y en el otro los que deben estar activos, respectivamente, siendo este ultimo el que recoge los enlaces simbólicos.

Para ser mas ordenado resulta útil crear archivos de configuración dentro de una carpeta sites-enabled dentro de nginx y, con la directiva include añadir el archivo de configuración correspondiente al Vhost que quieras.

Para ello:

  1. Configura la directiva include en nginx.conf: En el archivo principal de configuración de Nginx (nginx.conf), configura la directiva include para cargar todas las configuraciones de VirtualHost desde el directorio sites-enabled. Esto se hace dentro del bloque http en el archivo nginx.conf.

/etc/nginx/nginx.conf
http {
    # Otras configuraciones de HTTP aquí...

    include /etc/nginx/sites-enabled/*;
}
/etc/nginx/sites-enabled/alex.conf
}
#Configuración de páginas de error (opcional)
    error_page 404 /404.html;
    location = /404.html {
        root /var/www/alex.com/html;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /var/www/alex.com/html;
    }
}
  1. Una vez creado el archivo, lo referenciamos en el virtualhost

/etc/nginx/sites-available/alex.com
server {
    listen 80;
    server_name www.alex.com;

    location / {
        root /etc/nginx/sites-enabled/alex.conf;
        # Otras configuraciones...
    }
}

Paso 4: Habilitar el archivo de configuración

Habilita tu virtual host creando un enlace simbólico:

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

Si quisiéramos ahora "desactivar" un sitio, simplemente eliminaríamos el enlace simbólico en sites-enabled:

sudo rm /etc/nginx/sites-enabled/alex.com

Reiniciamos el servicio y listo.

Paso 5: Probar la configuración de Nginx

Antes de reiniciar Nginx, prueba tu configuración para asegurarte de que no haya errores de sintaxis:

sudo nginx -t

Paso 6: Reiniciar Nginx

Finalmente, reinicia Nginx para aplicar los cambios:

sudo systemctl restart nginx

Paso 7: Editar el archivo hosts local (opcional)

Si aún no has configurado DNS, puedes editar el archivo hosts de tu equipo local para probar el virtual host:

# Añadir esta línea a /etc/hosts en sistemas Unix o
# C:\Windows\System32\Drivers\etc\hosts en Windows
127.0.0.1 tudominio.com

Con estos pasos, tendrás tu VirtualHost para tudominio.com corriendo en Nginx.

Última actualización