Nginx en Ubuntu: instala y configura tu primer sitio
Puedes instalar Nginx desde los paquetes de Ubuntu y servir un sitio estático con un bloque de servidor. Esta guía utiliza una carpeta de práctica para comprobar configuración y acceso antes de añadir HTTPS o una aplicación.
Si el equipo ya atiende páginas, respalda la configuración y revisa qué servicio ocupa los puertos. No detengas Apache u otro servidor sin saber qué sitios utiliza.
Instala y revisa el servicio
sudo apt update
sudo apt install nginx
sudo systemctl status nginx --no-pager
sudo ss -lntp
La versión del paquete depende de la distribución y sus actualizaciones. El número por sí solo no describe todos los parches del proveedor; consulta mantenimiento y soporte del repositorio utilizado.
Crea una carpeta de prueba
sudo install -d -m 755 /var/www/lab
printf '<!doctype html><html lang="es"><title>Laboratorio</title><h1>Nginx funciona</h1></html>\n' \
| sudo tee /var/www/lab/index.html >/dev/null
sudo chmod 644 /var/www/lab/index.html
Nginx necesita leer archivos y atravesar los directorios de la ruta. No necesita ser propietario de todo el sitio para servir contenido estático ni requiere permisos 777.
Define un bloque de servidor
Guarda /etc/nginx/sites-available/lab:
server {
listen 80;
server_name lab.ejemplo.com;
root /var/www/lab;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
El esquema sites-available/sites-enabled es habitual en Ubuntu, no una estructura universal de todas las instalaciones Nginx. Comprueba qué archivos incluye tu configuración principal.
Habilita y valida
sudo ln -s /etc/nginx/sites-available/lab /etc/nginx/sites-enabled/lab
sudo nginx -t
sudo systemctl reload nginx
curl -i -H 'Host: lab.ejemplo.com' http://127.0.0.1
Revisa un enlace existente antes de crearlo otra vez. La cabecera Host permite probar el bloque sin depender todavía del DNS público. Abrir solo la IP puede seleccionar otro sitio predeterminado.
Red y HTTPS
Si quieres acceder desde otra máquina, revisa firewall del sistema y del proveedor. Abre únicamente los puertos necesarios y conserva acceso SSH.
Para un dominio real, configura DNS y un certificado válido para ese nombre. No es suficiente cambiar http por https: el servidor debe escuchar con una configuración TLS correcta y renovar sus certificados.
Diagnóstico por síntoma
Un error de puerto ocupado requiere identificar el proceso. Un 403 puede indicar permisos o ausencia de índice. Un 404 puede ser una ruta correcta para un archivo inexistente o un bloque mal seleccionado.
sudo tail -n 50 /var/log/nginx/error.log
sudo journalctl -u nginx --since "15 minutes ago" --no-pager
No añadas ajustes de caché, buffers y compresión para corregir un error de archivo. Primero estabiliza el sitio mínimo.
Aplicar cambios sin perder el servicio
Conserva la versión anterior del archivo, valida y recarga. Si la prueba falla, vuelve a la configuración conocida y revisa los mensajes. Una recarga válida no comprueba que todas las rutas de una aplicación funcionen.
Preguntas frecuentes
¿Tengo que borrar el sitio default?
No necesariamente. Decide cómo quieres atender hosts no reconocidos y evita conflictos de bloques. No borres configuraciones de otros sitios sin revisarlas.
¿Por qué veo otra página al abrir la IP?
La selección depende del puerto y la cabecera Host. Prueba el nombre configurado y revisa cuál es el servidor predeterminado.
¿Puedo ejecutar PHP solo con Nginx?
Necesitas un backend como PHP-FPM y una configuración apropiada. Servir archivos estáticos y procesar PHP son tareas diferentes.
En pocas palabras
Nginx necesita un bloque de servidor que coincida con el host solicitado y una ruta de archivos accesible. Validar configuración y probar la respuesta permite separar instalación de contenido y DNS.
Conclusión
Conserva el sitio mínimo funcionando y documenta sus archivos. Añade TLS y optimizaciones después de medir y entender el comportamiento, sin acumular reglas que no necesitas.
Para continuar, revisa Cómo instalar Ubuntu desde una USB: paso a paso y Cómo instalar Docker en Ubuntu 24.04: guía práctica paso a paso.
