Instalar Nginx en Debian 12 y Ubuntu 24.04 desde el repositorio oficial

7 min de lectura·Matthieu·nginxdebianubuntuweb-serverfirewall|

Instala Nginx desde el repositorio oficial nginx.org en Debian 12 o Ubuntu 24.04. Cubre la clave de firma, el pinning de apt, reglas de firewall para UFW y nftables, gestión con systemd y verificación incluida.

Este tutorial instala Nginx desde el repositorio oficial nginx.org en un VPS con Debian 12 o Ubuntu 24.04. Obtienes la última versión (1.28.2 stable o 1.29.6 mainline) en lugar del paquete desactualizado que trae tu distribución. Cada paso incluye verificación para que sepas exactamente qué ocurrió.

Para entender dónde encaja Nginx en tu pila de servidor, consulta Administración de Nginx en un VPS.

Requisitos previos

Necesitas:

  • Un VPS con Debian 12 (Bookworm) o Ubuntu 24.04 (Noble Numbat)
  • Un usuario no root con privilegios sudo
  • Acceso SSH al servidor

Todos los comandos de este tutorial se ejecutan como usuario sudo. No como root.

¿Instalar Nginx stable o mainline?

Nginx mantiene dos ramas. Stable (número de versión par, actualmente 1.28.x) solo recibe correcciones críticas. Mainline (número de versión impar, actualmente 1.29.x) recibe todas las nuevas funcionalidades, correcciones de errores y parches de seguridad. El equipo de Nginx recomienda mainline para producción. Stable existe para quienes prefieren cambios mínimos entre actualizaciones.

Stable Mainline
Versión actual 1.28.2 1.29.6
Frecuencia de actualización Solo correcciones críticas Cada 4-6 semanas
Nuevas funcionalidades No
Recomendado por nginx.org Para configuraciones conservadoras Para producción

Este tutorial usa stable por defecto. Para instalar mainline, sustituye la URL del repositorio donde se indica.

¿Por qué usar el repositorio oficial en lugar del paquete de la distribución?

Los repositorios apt por defecto de Debian 12 y Ubuntu 24.04 traen Nginx 1.22.1 y 1.24.0, respectivamente. Estas versiones tienen meses o años de retraso respecto a las versiones oficiales. El repositorio nginx.org te da la última versión stable o mainline, mantenida por el equipo de Nginx.

Fuente Versión Debian 12 Versión Ubuntu 24.04 Mantenido por
Repositorio de la distribución 1.22.1 1.24.0 Mantenedores del SO
nginx.org stable 1.28.2 1.28.2 Equipo Nginx
nginx.org mainline 1.29.6 1.29.6 Equipo Nginx

¿Cómo instalar Nginx en Debian 12 desde el repositorio oficial?

Instala los requisitos previos, añade la clave de firma de nginx.org, configura la fuente apt, fija el repositorio e instala. Tarda unos dos minutos.

Paso 1: Instalar los requisitos previos

sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring

Paso 2: Importar la clave de firma de nginx.org

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Verifica la huella digital de la clave:

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

Atención: la salida lista varias claves de firma. Busca esta huella digital entre ellas:

573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62

Si ninguna de las huellas digitales listadas coincide, elimina el archivo y descárgalo de nuevo. Una clave que no coincide significa que la descarga fue interceptada o corrupta.

Paso 3: Añadir el repositorio apt

Para stable:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/debian $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Para mainline, sustituye packages por packages/mainline:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Paso 4: Fijar el repositorio oficial

Esto asegura que apt prefiera el paquete de nginx.org sobre la versión de la distribución:

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

Sin fijar el repositorio, un futuro apt upgrade podría reemplazar el paquete oficial con la versión antigua de la distribución.

Paso 5: Instalar Nginx

sudo apt update
sudo apt install -y nginx

Paso 6: Iniciar y verificar la instalación

nginx -v

Salida esperada para stable:

nginx version: nginx/1.28.2

El paquete de nginx.org no se inicia automáticamente tras la instalación. Inícialo ahora:

sudo systemctl start nginx

Comprueba que el servicio está corriendo:

sudo systemctl status nginx

Atención: busca Active: active (running) en la salida.

Verifica que Nginx está escuchando en el puerto 80:

ss -tlnp | grep :80

Salida esperada:

LISTEN 0      511          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=...,fd=...))

Prueba la página de bienvenida:

curl -I http://localhost

Atención: la respuesta debe incluir HTTP/1.1 200 OK y Server: nginx/1.28.2.

¿Cómo instalar Nginx en Ubuntu 24.04 desde el repositorio oficial?

El proceso es casi idéntico a Debian. Las únicas diferencias son el paquete de requisitos previos y la URL del repositorio.

Paso 1: Instalar los requisitos previos

sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring

Nota: Ubuntu usa ubuntu-keyring en lugar de debian-archive-keyring.

Paso 2: Importar la clave de firma de nginx.org

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Verifica la huella digital (misma clave que Debian):

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

Busca 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 entre las claves listadas.

Paso 3: Añadir el repositorio apt

Para stable:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Para mainline:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Paso 4: Fijar el repositorio oficial

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

Paso 5: Instalar Nginx

sudo apt update
sudo apt install -y nginx

Paso 6: Iniciar y verificar la instalación

Inicia Nginx (no se inicia automáticamente tras la instalación):

sudo systemctl start nginx

Ejecuta las mismas verificaciones que en Debian:

nginx -v
sudo systemctl status nginx
ss -tlnp | grep :80
curl -I http://localhost

Deberías ver nginx/1.28.2 (stable) o nginx/1.29.6 (mainline) tanto en nginx -v como en las cabeceras de respuesta de curl.

¿Cómo gestionar Nginx con systemd?

Nginx incluye un archivo de unidad systemd. Estos son los comandos que usarás a diario.

Comando Qué hace
sudo systemctl start nginx Iniciar Nginx
sudo systemctl stop nginx Detener Nginx
sudo systemctl restart nginx Detener e iniciar (corta conexiones)
sudo systemctl reload nginx Recargar configuración sin cortar conexiones
sudo systemctl enable nginx Iniciar en el arranque
sudo systemctl disable nginx No iniciar en el arranque
sudo systemctl status nginx Mostrar estado y logs recientes

Reload vs restart: Usa reload tras cambios de configuración. Aplica la nueva configuración sin cortar las conexiones activas. Usa restart solo cuando hayas cambiado configuraciones a nivel de binario o actualizado Nginx. Reload es seguro. Restart corta todas las conexiones activas.

Habilita el inicio automático de Nginx en el arranque:

sudo systemctl enable nginx

Siempre prueba tu configuración antes de recargar:

sudo nginx -t

Salida esperada:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Si nginx -t reporta errores, corrígelos antes de recargar. Un reload fallido deja la configuración anterior activa. Un restart fallido deja Nginx detenido.

¿Cómo configurar reglas de firewall UFW para Nginx?

UFW (Uncomplicated Firewall) es el frontend de firewall por defecto en Ubuntu. Está disponible en Debian pero no instalado por defecto. Algunas imágenes VPS no incluyen UFW. Si ufw no se encuentra, instálalo primero:

sudo apt install -y ufw

El paquete de nginx.org no incluye perfiles de aplicación UFW (Nginx Full, Nginx HTTP, Nginx HTTPS). Esos perfiles solo vienen con el paquete de la distribución. Usa números de puerto en su lugar.

Permite SSH primero (para no quedarte fuera):

sudo ufw allow OpenSSH

Permite HTTP (80) y HTTPS (443):

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Si solo necesitas HTTPS:

sudo ufw allow 443/tcp

Asegúrate de que UFW esté habilitado:

sudo ufw enable

Verifica las reglas:

sudo ufw status

La salida esperada incluye:

80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Si ufw status muestra Status: inactive, ejecuta primero sudo ufw enable.

¿Cómo configurar reglas de firewall nftables para Nginx?

Debian 12 usa nftables como backend de firewall por defecto. Si gestionas las reglas directamente (sin UFW), añade los puertos de Nginx a tu configuración de nftables.

Edita tu configuración de nftables:

sudo nano /etc/nftables.conf

Añade estas reglas dentro de tu cadena input (dentro de tu tabla inet filter):

tcp dport { 80, 443 } accept

Una configuración mínima funcional se ve así:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        iif lo accept
        ct state established,related accept
        tcp dport 22 accept
        tcp dport { 80, 443 } accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Aplica las reglas:

sudo nft -f /etc/nftables.conf

Verifica:

sudo nft list ruleset

Atención: busca tcp dport { 80, 443 } accept en la salida. Si no aparece, las reglas no se aplicaron.

Habilita nftables en el arranque:

sudo systemctl enable nftables

¿Cómo verificar que Nginx funciona correctamente?

Tras la instalación y la configuración del firewall, repasa esta lista de comprobación.

Desde el servidor:

nginx -v
sudo systemctl status nginx
ss -tlnp | grep :80
curl -I http://localhost

Desde tu máquina local (sustituye YOUR_SERVER_IP):

curl -I http://YOUR_SERVER_IP

Cabeceras de respuesta esperadas:

HTTP/1.1 200 OK
Server: nginx/1.28.2

Si el curl externo expira pero localhost funciona, tu firewall está bloqueando el puerto 80. Vuelve a la sección de UFW o nftables de arriba.

También puedes abrir http://YOUR_SERVER_IP en un navegador. Deberías ver la página "Welcome to nginx!".

Ubicaciones de archivos y directorios principales

Ruta Función
/etc/nginx/nginx.conf Archivo de configuración principal
/etc/nginx/conf.d/ Archivos de configuración adicionales (cargados por defecto)
/var/log/nginx/access.log Registro de acceso
/var/log/nginx/error.log Registro de errores
/usr/share/nginx/html/ Raíz de documentos por defecto

El paquete oficial de nginx.org usa /etc/nginx/conf.d/ para las configuraciones de sitios. Esto difiere del paquete de la distribución, que usa sites-available/ y sites-enabled/. Ambos enfoques funcionan. El patrón conf.d es más simple.

Para aprender cómo están organizados los archivos de configuración de Nginx, consulta Estructura de los archivos de configuración de Nginx. Para alojar varios dominios en este servidor, consulta Server Blocks de Nginx: Aloja Varios Dominios en un VPS.