Instalar Nginx en Debian 12 y Ubuntu 24.04 desde el repositorio oficial
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, gestion con systemd y verificacion en cada paso.
Instalar Nginx en Debian 12 y Ubuntu 24.04 desde el repositorio oficial
Este tutorial instala Nginx desde el repositorio oficial nginx.org en un VPS con Debian 12 o Ubuntu 24.04. Obtienes la ultima version (1.28.2 stable o 1.29.6 mainline) en lugar del paquete desactualizado que trae tu distribucion. Cada paso incluye verificacion para que sepas exactamente que ocurrio.
Para entender donde encaja Nginx en tu pila de servidor, consulta Nginx Administration on a 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 (numero de version par, actualmente 1.28.x) solo recibe correcciones criticas. Mainline (numero de version impar, actualmente 1.29.x) recibe todas las nuevas funcionalidades, correcciones de errores y parches de seguridad. El equipo de Nginx recomienda mainline para produccion. Stable existe para quienes prefieren cambios minimos entre actualizaciones.
| Stable | Mainline | |
|---|---|---|
| Version actual | 1.28.2 | 1.29.6 |
| Frecuencia de actualizacion | Solo correcciones criticas | Cada 4-6 semanas |
| Nuevas funcionalidades | No | Si |
| Recomendado por nginx.org | Para configuraciones conservadoras | Para produccion |
Este tutorial usa stable por defecto. Para instalar mainline, sustituye la URL del repositorio donde se indica.
Por que usar el repositorio oficial en lugar del paquete de la distribucion?
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 anos de retraso respecto a las versiones oficiales. El repositorio nginx.org te da la ultima version stable o mainline, mantenida por el equipo de Nginx.
| Fuente | Version Debian 12 | Version Ubuntu 24.04 | Mantenido por |
|---|---|---|---|
| Repositorio de la distribucion | 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 |
Como instalar Nginx en Debian 12 desde el repositorio oficial?
Instala los requisitos previos, anade 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
Atencion: 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 descargalo de nuevo. Una clave que no coincide significa que la descarga fue interceptada o corrupta.
Paso 3: Anadir 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 version de la distribucion:
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 podria reemplazar el paquete oficial con la version antigua de la distribucion.
Paso 5: Instalar Nginx
sudo apt update
sudo apt install -y nginx
Paso 6: Iniciar y verificar la instalacion
nginx -v
Salida esperada para stable:
nginx version: nginx/1.28.2
El paquete de nginx.org no se inicia automaticamente tras la instalacion. Inicialo ahora:
sudo systemctl start nginx
Comprueba que el servicio esta corriendo:
sudo systemctl status nginx
Atencion: busca Active: active (running) en la salida.
Verifica que Nginx esta 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 pagina de bienvenida:
curl -I http://localhost
Atencion: la respuesta debe incluir HTTP/1.1 200 OK y Server: nginx/1.28.2.
Como instalar Nginx en Ubuntu 24.04 desde el repositorio oficial?
El proceso es casi identico a Debian. Las unicas 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: Anadir 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 instalacion
Inicia Nginx (no se inicia automaticamente tras la instalacion):
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
Deberias ver nginx/1.28.2 (stable) o nginx/1.29.6 (mainline) tanto en nginx -v como en las cabeceras de respuesta de curl.
Como gestionar Nginx con systemd?
Nginx incluye un archivo de unidad systemd. Estos son los comandos que usaras a diario.
| Comando | Que 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 configuracion 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 configuracion. Aplica la nueva configuracion 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 automatico de Nginx en el arranque:
sudo systemctl enable nginx
Siempre prueba tu configuracion 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, corrigelos antes de recargar. Un reload fallido deja la configuracion anterior activa. Un restart fallido deja Nginx detenido.
Como configurar reglas de firewall UFW para Nginx?
UFW (Uncomplicated Firewall) es el frontend de firewall por defecto en Ubuntu. Esta disponible en Debian pero no instalado por defecto. Algunas imagenes VPS no incluyen UFW. Si ufw no se encuentra, instalalo primero:
sudo apt install -y ufw
El paquete de nginx.org no incluye perfiles de aplicacion UFW (Nginx Full, Nginx HTTP, Nginx HTTPS). Esos perfiles solo vienen con el paquete de la distribucion. Usa numeros 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
Asegurate de que UFW este 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.
Como configurar reglas de firewall nftables para Nginx?
Debian 12 usa nftables como backend de firewall por defecto. Si gestionas las reglas directamente (sin UFW), anade los puertos de Nginx a tu configuracion de nftables.
Edita tu configuracion de nftables:
sudo nano /etc/nftables.conf
Anade estas reglas dentro de tu cadena input (dentro de tu tabla inet filter):
tcp dport { 80, 443 } accept
Una configuracion minima funcional se ve asi:
#!/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
Atencion: 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
Como verificar que Nginx funciona correctamente?
Tras la instalacion y la configuracion del firewall, repasa esta lista de comprobacion.
Desde el servidor:
nginx -v
sudo systemctl status nginx
ss -tlnp | grep :80
curl -I http://localhost
Desde tu maquina 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 esta bloqueando el puerto 80. Vuelve a la seccion de UFW o nftables de arriba.
Tambien puedes abrir http://YOUR_SERVER_IP en un navegador. Deberias ver la pagina "Welcome to nginx!".
Ubicaciones de archivos y directorios principales
| Ruta | Funcion |
|---|---|
/etc/nginx/nginx.conf |
Archivo de configuracion principal |
/etc/nginx/conf.d/ |
Archivos de configuracion adicionales (cargados por defecto) |
/var/log/nginx/access.log |
Registro de acceso |
/var/log/nginx/error.log |
Registro de errores |
/usr/share/nginx/html/ |
Raiz 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 distribucion, que usa sites-available/ y sites-enabled/. Ambos enfoques funcionan. El patron conf.d es mas simple.
Para aprender como estan organizados los archivos de configuracion de Nginx, consulta . Para alojar varios dominios en este servidor, consulta .
Copyright 2026 Virtua.Cloud. Todos los derechos reservados. Este contenido es una obra original del equipo de Virtua.Cloud. La reproduccion, republicacion o redistribucion sin permiso escrito esta prohibida.
¿Listo para probarlo?
Despliega tu propio servidor en segundos. Linux, Windows o FreeBSD.
Ver planes VPS