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, 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 | Sí |
| 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.
¿Listo para probarlo?
Aloja tus aplicaciones web en un VPS fiable. →