Marcio Cunha

Cómo Alojar Múltiples Sitios Web en el Mismo Ubuntu Server con Nginx y Virtual Hosts

Aprende a estructurar un servidor Linux para recibir varios dominios diferentes usando bloques de servidor, enrutamiento de tráfico y aislamiento seguro.

Marcio Cunha12 min
También disponible en:EnglishPortuguês
Resumen
  • El uso de bloques de servidor en Nginx resuelve el problema de dirigir solicitudes de diferentes dominios a carpetas distintas en el disco.
  • Configurar registros DNS de tipo A y CNAME correctamente asegura que el tráfico de internet llegue a la IP pública correcta del servidor.
  • El aislamiento de permisos de archivos evita que fallas de seguridad en una aplicación comprometan los demás sitios alojados.
  • La emisión de certificados SSL gratuitos mediante Let's Encrypt protege el tráfico de todos los dominios de forma independiente.
  • Monitorear el uso de recursos del sistema evita que un sitio con mucho tráfico perjudique el rendimiento de los vecinos en el mismo servidor.

El Desafío de Centralizar Varias Aplicaciones en una Sola Máquina

Cuando comenzamos a crear proyectos en internet, el camino más común es contratar una máquina virtual barata en la nube para cada sitio que ponemos en marcha. En la práctica, esto significa desperdiciar dinero y poder de procesamiento, ya que un sitio institucional simple consume solo una fracción minúscula de la capacidad de un procesador moderno. La solución para este desperdicio es el uso de un único servidor ejecutando múltiples dominios simultáneamente, dividiendo los costos de infraestructura y simplificando el mantenimiento. Sin embargo, surge el problema de ingeniería: ¿cómo hacer que el servidor entienda que una solicitud proveniente de sitioA.com debe abrir archivos completamente diferentes de una solicitud para sitioB.com?

Para resolver este rompecabezas, utilizamos un software llamado servidor web inverso, siendo Nginx una de las opciones más populares y eficientes del mercado actual. En la práctica, Nginx funciona como un portero inteligente en la puerta de entrada de tu Ubuntu Server, observando la dirección escrita por el usuario en el navegador y reenviando la petición al piso correcto. Este mecanismo se conoce técnicamente como Virtual Hosting o bloques de servidor. Sin él, el servidor se quedaría perdido, mostrando siempre la misma página de inicio para cualquier dirección que golpeara su puerta.

Preparando el Terreno e Instalando el Servidor Web

Antes de configurar los dominios, debemos asegurarnos de que el sistema operativo esté limpio, actualizado y con la herramienta de atención web debidamente instalada. Ubuntu Server ofrece un administrador de paquetes llamado APT, que funciona como una tienda de aplicaciones oficial del sistema mediante la línea de comandos. El primer paso práctico consiste en actualizar la lista local de paquetes escribiendo sudo apt update && sudo apt upgrade -y en la terminal. A continuación, instalamos Nginx con el comando sudo apt install nginx -y. Este paso descarga los archivos esenciales e inicia el servicio en segundo plano, asegurando que el servidor ya responda a solicitudes básicas en el puerto estándar web.

Tras la instalación, vale la pena verificar si el cortafuegos del sistema, conocido como UFW, está configurado para permitir el tráfico de internet. En la práctica, el cortafuegos actúa como un guardia de seguridad en la puerta, decidiendo quién entra y quién se queda fuera. Liberamos las reglas de red escribiendo sudo ufw allow 'Nginx Full', lo que garantiza que tanto las conexiones comunes como las seguras puedan pasar. Si abres la dirección IP numérica de tu servidor en el navegador ahora, verás la página de bienvenida predeterminada de Nginx, indicando que el motor principal ya está rugiendo y listo para recibir instrucciones más avanzadas.

Organizando la Estructura de Carpetas para Cada Dominio

Un error común de los principiantes es arrojar los archivos de todos los sitios dentro de la carpeta predeterminada que Nginx crea automáticamente, mezclando códigos y creando brechas de seguridad. La ingeniería detrás de un entorno robusto requiere un aislamiento riguroso, creando una estructura de directorios dedicada para cada proyecto dentro del directorio estándar de páginas web de Linux. Para nuestro primer sitio, creamos la carpeta /var/www/sitiouno.com/html, y para el segundo sitio, la carpeta /var/www/sitiodos.com/html. Usamos el comando sudo mkdir -p para asegurar que todas las carpetas intermedias se creen de una sola vez sin quejas del sistema operativo.

Además de crear las carpetas, debemos asegurar que el usuario del sistema que ejecuta Nginx tenga permiso para leer estos archivos, pero sin que usuarios malintencionados logren invadir el sistema. En la práctica, ajustamos la propiedad de las carpetas usando el comando sudo chown -R $USER:$USER /var/www/sitiouno.com/html, lo que otorga el control a tu usuario actual durante el desarrollo. También ajustamos los permisos de lectura con sudo chmod -R 755 /var/www, asegurando que el mundo externo pueda leer el contenido de los sitios, pero solo el administrador pueda alterarlos. Para probar si todo funciona, creamos un archivo de prueba simple llamado index.html dentro de cada carpeta con un mensaje que identifica qué sitio es.

Configurando los Bloques de Servidor en Nginx

El alma del alojamiento múltiple reside en los archivos de configuración de Nginx, ubicados en la carpeta /etc/nginx/sites-available/. Cada dominio debe tener su propio archivo de configuración aislado, describiendo exactamente cómo debe comportarse el servidor al recibir una solicitud para esa dirección específica. Creamos un archivo llamado sitiouno.com para el primer proyecto y lo llenamos con directrices claras que informan a Nginx dónde están los archivos en el disco y cuál es el nombre del dominio correspondiente. Esta separación evita el efecto en cascada, donde un error tipográfico en un sitio derriba el servidor entero.

Dentro de este archivo de configuración, definimos bloques de código llamados server. Un ejemplo práctico de la estructura esencial es el siguiente bloque básico:

server {
    listen 80;
    server_name sitiouno.com www.sitiouno.com;
    root /var/www/sitiouno.com/html;
    index index.html index.htm;

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

En la práctica, esta instrucción le dice a Nginx que escuche en el puerto 80 (tráfico común sin cifrar) cuando alguien escriba sitiouno.com, busque los archivos dentro de la carpeta que creamos y entregue la página de inicio solicitada. Repetimos el proceso para el segundo sitio, creando un archivo separado para él. Para activar estas configuraciones, creamos enlaces simbólicos —que funcionan como accesos directos inteligentes— apuntando a la carpeta /etc/nginx/sites-enabled/. Antes de reiniciar el servidor, ejecutamos el comando de prueba sudo nginx -t para validar que no haya errores de sintaxis, evitando caídas indeseadas en producción.

Apuntando el DNS y Blindando con Certificados de Seguridad

Con el servidor configurado y funcionando, el siguiente paso es asegurar que los dominios comprados en registradores externos sepan dónde encontrar tu Ubuntu Server. En la práctica, accedes al panel de tu registrador de dominios y creas registros de tipo A apuntando el nombre de tu sitio a la dirección IP pública de tu máquina en la nube. Cuando un usuario escribe la dirección en el navegador, el sistema mundial de nombres de dominio traduce esto a tu IP, haciendo que el tráfico llegue exactamente al Nginx que configuramos en los pasos anteriores. Este proceso de propagación puede tardar unos minutos en extenderse globalmente.

El paso final obligatorio para cualquier sitio web moderno es la instalación de certificados SSL, que transforman el protocolo HTTP en HTTPS, mostrando el famoso candado verde de seguridad en el navegador. Sin esto, los navegadores modernos bloquean el acceso y muestran alertas aterradoras a los visitantes. Utilizamos una herramienta automatizada llamada Certbot, instalada mediante el administrador de paquetes, que habla directamente con la autoridad certificadora Let's Encrypt. Ejecutando el comando sudo certbot --nginx, el sistema detecta automáticamente todos los bloques de servidor configurados en Nginx, genera certificados gratuitos e incluso configura la renovación automática en segundo plano, asegurando que tus múltiples sitios permanezcan seguros y funcionales indefinidamente.

Consideraciones Finales y Mantenimiento Continuo

Alojar múltiples sitios web en el mismo Ubuntu Server es una excelente estrategia de optimización de recursos, pero requiere disciplina en la organización y el monitoreo diario. Al aislar carpetas, estructurar bloques de servidor limpios y automatizar la renovación de certificados SSL, construyes un entorno profesional comparable al de grandes agencias de alojamiento. El mantenimiento se convierte en una rutina de observar registros de errores de Nginx y asegurar que las actualizaciones de seguridad del sistema operativo no interfieran con las configuraciones de red. Con esta base sólida, escalar a cinco, diez o veinte sitios en la misma máquina deja de ser un riesgo técnico y pasa a ser una operación controlada y altamente eficiente.