Curso de Ubuntu 26.04 / Configurar dos sitios locales en Nginx
La configuración de sitios de Ubuntu Nginx se puede gestionar comprobando la estructura de inclusión real y luego activando los archivos de configuración de sites-available en sites-enabled. Esta práctica configura dos sitios en 127.0.0.1:8080 para verificar la respuesta por Host sin exposición externa.
Aquí, el objeto que no se publica externamente es el nuevo sitio de práctica en el puerto 8080. La instalación de Nginx en Ubuntu puede iniciar el sitio predeterminado, por lo que todo el servidor no se quedará solo en la interfaz de bucle local. Antes de la instalación, consulte la guía de UFW sobre mantener el acceso de administración y el alcance del cortafuegos o realícelo en una VM de práctica aislada del exterior.
Comprobar la instalación y la configuración existente
sudo apt update
sudo apt install nginx curl
sudo nginx -t
sudo nginx -T
sudo ss -lntp
Realícelo en una VM dedicada, y si un servidor web existente está usando los puertos, no lo cierre por la fuerza. Con nginx -T, verifique la inclusión real de sites-enabled y los listen, server_name y servidores predeterminados existentes. La configuración completa puede contener direcciones sensibles o ajustes de autenticación, por lo que no se publican.
Verificar también la exposición del sitio predeterminado en el puerto 80
sudo ss -lntp
sudo ufw status verbose
ls -l /etc/nginx/sites-enabled
sudo nginx -T
Una escucha como 0.0.0.0:80·[::]:80 es diferente de 127.0.0.1:8080. En un entorno donde UFW está desactivado o el puerto 80 está ampliamente permitido, otros dispositivos pueden acceder al sitio predeterminado. Verifique las nuevas conexiones distinguiendo entre el interior del servidor y los clientes realmente permitidos o excluidos.
Si no necesita el sitio predeterminado del paquete en una nueva VM dedicada, puede conservar solo ese enlace simbólico en el bloque siguiente y desactivarlo. No se aplica a sitios en operación existentes. Si el enlace esperado, el destino o la verificación/backup difiere o falla, deténgase.
(
set -eu
link=/etc/nginx/sites-enabled/default
if [ ! -L "$link" ] || [ "$(readlink -f "$link")" != /etc/nginx/sites-available/default ]; then
printf 'Not the expected package-default symlink; inspect manually.\n' >&2
exit 1
fi
backup_dir=$(sudo mktemp -d /root/nginx-default-link.XXXXXX)
sudo cp -a "$link" "$backup_dir/default"
printf 'Preserved link: %s/default\n' "$backup_dir"
sudo rm -- "$link"
sudo nginx -t
sudo systemctl reload nginx
sudo ss -lntp
)
Se mantiene el sites-available/default original. Si queda el puerto 80, investigue otros sitios/procesos. Para la restauración, use el enlace de la copia de seguridad registrada, asegurándose de que no haya cambios posteriores con el mismo nombre, y colóquelo en la ubicación original, luego ejecute nginx -t y, si es exitoso, recargue. No sobrescriba cambios de otros administradores.
Preparar diferentes raíces de documentos
Si las carpetas y los archivos de configuración con los nombres siguientes ya existen, preserve su contenido y elija un nombre nuevo para prácticas. En una ruta dedicada vacía, cree respuestas diferentes como se indica a continuación. Deben ser legibles por el usuario del servidor web, pero no es necesario dar permisos de escritura a todos los usuarios.
sudo install -d -m 0755 /srv/ubuntu-course-alpha /srv/ubuntu-course-beta
printf '%s\n' 'alpha-site' | sudo tee /srv/ubuntu-course-alpha/index.html
printf '%s\n' 'beta-site' | sudo tee /srv/ubuntu-course-beta/index.html
Definir un sitio local completo en un archivo de configuración
Guarde el bloque completo en el archivo nuevo /etc/nginx/sites-available/ubuntu-course-lab, por ejemplo mediante sudoedit, tras comprobar que el nombre no existe. Los nombres alpha.example.test y beta.example.test son para pruebas locales; no se usan para publicar un dominio real ni obtener un certificado HTTPS público. El laboratorio del puerto 8080 es independiente del sitio predeterminado del puerto 80, que puede haber desactivado en el paso opcional anterior.
server {
listen 127.0.0.1:8080 default_server;
server_name _;
return 404;
}
server {
listen 127.0.0.1:8080;
server_name alpha.example.test;
root /srv/ubuntu-course-alpha;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 127.0.0.1:8080;
server_name beta.example.test;
root /srv/ubuntu-course-beta;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
El primer bloque maneja Host desconocidos en la misma dirección y puerto con un 404. El guion bajo en server_name por sí mismo no tiene una función especial de rechazo; es una configuración para que default_server reciba las solicitudes predeterminadas. No se especifica un servidor predeterminado duplicado en la misma dirección y puerto.
Verificación de sintaxis y recarga después de la activación
(
set -eu
sudo ln -s /etc/nginx/sites-available/ubuntu-course-lab /etc/nginx/sites-enabled/ubuntu-course-lab
sudo nginx -t
sudo systemctl reload nginx
)
Si ya existe un enlace simbólico, no lo sobrescriba y verifique primero el destino. Si nginx -t falla, no recargue y corrija los conflictos de archivos, líneas o puertos. El éxito de la verificación de sintaxis no garantiza los permisos reales del archivo ni la respuesta HTTP correcta del Host.
Probar nombre, ruta y respuesta predeterminada por separado
Ejecute las consultas en el propio servidor: 127.0.0.1 se refiere al equipo donde se ejecuta curl. Si el entorno usa un proxy HTTP, añada --noproxy "*" a cada solicitud de este laboratorio para conectar directamente al servidor local.
curl --fail --show-error --resolve alpha.example.test:8080:127.0.0.1 http://alpha.example.test:8080/
curl --fail --show-error --resolve beta.example.test:8080:127.0.0.1 http://beta.example.test:8080/
curl -i -H "Host: unknown.example.test" http://127.0.0.1:8080/
Se espera que las dos primeras solicitudes correspondan a alpha-site y beta-site respectivamente, y que la última solicitud genere un 404. --resolve solo especifica el nombre y la dirección de conexión para esta solicitud y no cambia el DNS del sistema. Si la respuesta del servidor es diferente, compare include, server_name duplicados, puerto de solicitud, directorio raíz de documentos y registros.
Para desactivar la práctica, simplemente elimine este enlace de sites-enabled y luego, si pasa nginx -t, haga reload. No se eliminan los sitios existentes ni los archivos originales. La publicación real en Internet debe realizarse después de preparar por separado el dominio, la dirección, el firewall, HTTPS y las políticas de registro.




