Saltar al contenido

Cómo instalar y configurar un servidor web con Nginx

Nginx es uno de los servidores web más utilizados gracias a su rendimiento, bajo consumo de recursos y capacidad para atender muchas conexiones simultáneas. Puede servir páginas estáticas, actuar como proxy inverso y distribuir peticiones hacia aplicaciones escritas en Node.js, Python, PHP u otras tecnologías.

Configurar tu propio servidor web con Nginx es un paso fundamental si quieres alojar sitios o aplicaciones en un VPS y mantener el control sobre su funcionamiento.

En este tutorial aprenderás a instalar Nginx en Ubuntu Server, abrir el firewall, crear un bloque de servidor para tu dominio, activar HTTPS y resolver los problemas más habituales.

Qué vamos a configurar

Al terminar tendrás un servidor con esta estructura:

  • Nginx instalado y configurado para iniciarse automáticamente.
  • Puertos HTTP y HTTPS permitidos en el firewall.
  • Un directorio independiente para los archivos de tu sitio.
  • Un bloque de servidor asociado a tu dominio.
  • Una configuración comprobada antes de aplicarla.
  • HTTPS mediante un certificado gratuito.

Los pasos están orientados a Ubuntu Server 22.04 o 24.04, pero son muy similares en otras distribuciones basadas en Debian.

Requisitos previos

Necesitas lo siguiente:

  • Un VPS o servidor con Ubuntu y una dirección IP pública.
  • Un usuario con permisos de sudo.
  • Acceso al servidor mediante SSH.
  • Un dominio, si quieres publicar el sitio con un nombre y activar HTTPS.
  • Acceso al panel DNS del dominio.

Si todavía no tienes servidor, consulta nuestra guía sobre cómo elegir un proveedor de VPS. Para acceder de forma segura, sigue el tutorial sobre cómo conectarte a un servidor por SSH.

1. Actualizar el sistema

Conéctate por SSH y actualiza el índice de paquetes. Después instala las actualizaciones disponibles:

sudo apt update
sudo apt upgrade -y

Actualizar antes de instalar reduce la posibilidad de utilizar paquetes obsoletos y aplica correcciones de seguridad pendientes. Si el sistema actualiza el kernel, puede ser recomendable reiniciar:

sudo reboot

La conexión SSH se cerrará. Espera unos segundos y vuelve a entrar.

2. Instalar Nginx

Nginx está disponible en los repositorios oficiales de Ubuntu. Instálalo con:

sudo apt install nginx -y

El servicio normalmente se inicia de forma automática. Comprueba su estado:

sudo systemctl status nginx

Deberías ver active (running). Pulsa q para salir de la vista de estado.

También puedes verificar la respuesta desde el propio servidor:

curl -I http://localhost

Una respuesta con el estado 200 OK confirma que Nginx está atendiendo peticiones HTTP.

3. Configurar el firewall

Ubuntu utiliza habitualmente UFW para gestionar reglas sencillas de firewall. Antes de activarlo, permite las conexiones SSH para no perder el acceso remoto:

sudo ufw allow OpenSSH

Nginx instala varios perfiles. Puedes verlos con:

sudo ufw app list

Para permitir HTTP y HTTPS, utiliza el perfil completo:

sudo ufw allow 'Nginx Full'

Si UFW todavía está desactivado, actívalo y comprueba las reglas:

sudo ufw enable
sudo ufw status

El resultado debe mostrar permisos para OpenSSH y Nginx Full. Si administras el firewall desde el panel del proveedor, también tendrás que permitir los puertos TCP 80 y 443 allí.

4. Comprobar la página predeterminada

Abre un navegador y visita la dirección IP del servidor:

http://IP_DEL_SERVIDOR

Si aparece la página de bienvenida de Nginx, la instalación básica funciona. Si no carga, revisa lo siguiente:

  • Que el servicio esté activo con sudo systemctl status nginx.
  • Que UFW permita el tráfico web.
  • Que el firewall del proveedor tenga abiertos los puertos necesarios.
  • Que la dirección IP utilizada sea la pública del servidor.

5. Entender los archivos principales de Nginx

RutaFunción
/etc/nginx/nginx.confConfiguración principal de Nginx
/etc/nginx/sites-available/Configuraciones disponibles para sitios
/etc/nginx/sites-enabled/Sitios activados mediante enlaces simbólicos
/var/www/html/Directorio de la página predeterminada
/var/log/nginx/access.logRegistro de peticiones recibidas
/var/log/nginx/error.logErrores y avisos del servidor

En Ubuntu es habitual crear un archivo independiente dentro de sites-available para cada dominio y activarlo desde sites-enabled.

6. Crear el directorio del sitio

En los ejemplos utilizaremos ejemplo.com. Sustitúyelo siempre por tu dominio real.

sudo mkdir -p /var/www/ejemplo.com/html
sudo chown -R $USER:$USER /var/www/ejemplo.com/html
sudo chmod -R 755 /var/www/ejemplo.com

Crea una página sencilla para comprobar el nuevo sitio:

nano /var/www/ejemplo.com/html/index.html

Añade este contenido:

<!doctype html>
<html lang="es">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Mi sitio con Nginx</title>
</head>
<body>
  <h1>Nginx funciona correctamente</h1>
  <p>Tu nuevo servidor web ya está sirviendo este sitio.</p>
</body>
</html>

En Nano, guarda con Ctrl + O, confirma con Enter y cierra con Ctrl + X.

7. Crear un bloque de servidor

Un bloque server indica a Nginx qué dominio debe atender y dónde se encuentran sus archivos. Crea una configuración nueva:

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

Introduce lo siguiente, cambiando el dominio:

server {
    listen 80;
    listen [::]:80;

    server_name ejemplo.com www.ejemplo.com;

    root /var/www/ejemplo.com/html;
    index index.html index.htm;

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

listen define el puerto, server_name identifica los dominios, root señala el directorio público y try_files controla cómo se buscan los archivos solicitados.

8. Activar el sitio y probar la configuración

Crea un enlace simbólico en sites-enabled:

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

Antes de aplicar cambios, comprueba siempre la sintaxis:

sudo nginx -t

Si el resultado indica que la sintaxis es correcta y la prueba ha sido satisfactoria, recarga Nginx:

sudo systemctl reload nginx

Recargar es preferible a reiniciar cuando solo cambias la configuración, porque Nginx puede aplicar los cambios de forma ordenada sin interrumpir las conexiones activas.

Si no vas a utilizar el sitio predeterminado, puedes desactivarlo:

sudo unlink /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

9. Apuntar el dominio al servidor

En el panel DNS de tu dominio crea estos registros:

TipoNombreValor
A@IP pública del servidor
AwwwIP pública del servidor

Si utilizas IPv6, añade también registros AAAA con la dirección correspondiente. Los cambios DNS pueden tardar en propagarse.

Puedes comprobar la resolución desde tu equipo con:

nslookup ejemplo.com

Cuando el dominio devuelva la IP correcta, visita http://ejemplo.com. Deberías ver la página creada anteriormente.

10. Activar HTTPS con Certbot

No solicites el certificado hasta que el dominio apunte correctamente al servidor y el puerto 80 sea accesible. Instala Certbot:

sudo snap install --classic certbot

Solicita el certificado utilizando el complemento de Nginx:

sudo certbot --nginx -d ejemplo.com -d www.ejemplo.com

Certbot comprobará el dominio, instalará el certificado y adaptará el bloque del servidor. Durante el proceso podrás elegir la redirección automática de HTTP a HTTPS.

Comprueba la renovación automática:

sudo certbot renew --dry-run

Después visita https://ejemplo.com y verifica que el navegador muestra una conexión segura.

11. Usar Nginx como proxy inverso

Si tu aplicación funciona en un puerto interno, por ejemplo Node.js en 127.0.0.1:3000, Nginx puede recibir las peticiones públicas y reenviarlas.

Sustituye el bloque location / por:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Después prueba y recarga:

sudo nginx -t
sudo systemctl reload nginx

La aplicación debe escuchar solo en la interfaz interna cuando no necesite acceso directo desde internet.

12. Comandos habituales de administración

ComandoAcción
sudo systemctl status nginxConsultar el estado
sudo systemctl start nginxIniciar el servicio
sudo systemctl stop nginxDetener el servicio
sudo systemctl restart nginxReiniciar completamente
sudo systemctl reload nginxRecargar la configuración
sudo systemctl enable nginxActivar el inicio automático
sudo nginx -tComprobar sintaxis y archivos referenciados
nginx -vMostrar la versión instalada

13. Revisar registros y solucionar errores

Los registros suelen explicar por qué un sitio no responde correctamente:

sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

Para consultar eventos del servicio:

sudo journalctl -u nginx --since "10 minutes ago"

Error 403 Forbidden

Comprueba la ruta indicada en root, la existencia del archivo de inicio y los permisos de los directorios. El proceso de Nginx debe poder leer los archivos.

Error 404 Not Found

Revisa que la URL corresponda a un archivo real dentro del directorio configurado y que try_files sea adecuado para tu aplicación.

Error 502 Bad Gateway

Cuando utilizas proxy inverso, este error suele indicar que la aplicación no está funcionando, escucha en otro puerto o rechaza la conexión. Comprueba primero el servicio de la aplicación.

Nginx no se inicia

Ejecuta sudo nginx -t. También verifica si otro programa está utilizando los puertos 80 o 443:

sudo ss -ltnp | grep -E ':80|:443'

14. Seguridad y mantenimiento

  • Instala actualizaciones de seguridad con regularidad.
  • Utiliza claves SSH y evita administrar el servidor como root.
  • Mantén abiertos únicamente los puertos necesarios.
  • Prueba la configuración con nginx -t antes de recargar.
  • Realiza copias de /etc/nginx y del contenido de tus sitios.
  • Revisa los registros y configura alertas para errores repetidos.
  • Utiliza HTTPS y comprueba periódicamente la renovación del certificado.
  • Protege y actualiza también la aplicación situada detrás de Nginx.

Nginx no sustituye la seguridad del sistema operativo ni la de la aplicación. El servidor debe mantenerse como un conjunto.

15. Mejoras básicas de rendimiento

La configuración predeterminada suele funcionar bien. Optimiza solo después de medir y evita copiar ajustes sin entenderlos.

  • Comprime respuestas de texto con gzip cuando sea apropiado.
  • Configura caché para archivos estáticos con versiones en el nombre.
  • Reduce el tamaño de imágenes y utiliza formatos modernos.
  • Activa HTTP/2 o HTTP/3 únicamente con una configuración TLS correcta.
  • Supervisa CPU, memoria, disco, latencia y tiempos de respuesta.

Para archivos estáticos puedes añadir, dentro del bloque del servidor, una política sencilla:

location ~* \.(css|js|jpg|jpeg|png|gif|svg|webp|ico)$ {
    expires 7d;
    add_header Cache-Control "public";
}

Después de cualquier cambio, ejecuta sudo nginx -t y recarga el servicio.

Checklist final

  • Nginx está activo y habilitado al arrancar.
  • Los puertos 80 y 443 están permitidos.
  • El dominio apunta a la IP correcta.
  • El bloque de servidor utiliza el dominio y la ruta adecuados.
  • sudo nginx -t termina sin errores.
  • HTTP redirige a HTTPS.
  • La renovación de Certbot supera la prueba.
  • Existen copias de seguridad de configuración y contenido.
  • Los registros no muestran errores repetidos.

Conclusión

Ya tienes los pasos necesarios para instalar Nginx, publicar un sitio independiente y protegerlo con HTTPS. La práctica más importante es comprobar siempre la configuración antes de aplicarla y revisar los registros cuando algo falla.

A partir de esta base puedes alojar varias webs, conectar aplicaciones mediante proxy inverso o añadir caché y balanceo. Avanza poco a poco, documenta cada cambio y conserva una copia de la última configuración que funcionaba.

Para ampliar información, consulta la guía de instalación de Nginx de Ubuntu Server y la guía oficial para principiantes de Nginx.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *