Cómo Instalar Nginx con Soporte HTTP/2 en Ubuntu (Guía Completa)
Nginx es uno de los servidores web más ampliamente implementados en el mundo, celebrado por su rendimiento excepcional, bajo consumo de memoria y capacidad para manejar miles de conexiones simultáneas. Cuando se combina con HTTP/2, Nginx se convierte en una plataforma aún más poderosa — permitiendo solicitudes multiplexadas, compresión de encabezados, server push y tiempos de carga de página dramáticamente reducidos.
Esta guía completa te guía a través de cada paso requerido para instalar Nginx con soporte completo de HTTP/2 en Ubuntu 20.04 y Ubuntu 22.04 LTS, desde la configuración inicial hasta la configuración SSL, optimización de bloques de servidor y verificación en vivo.
> ¿Para quién es esta guía? Administradores de sistemas, desarrolladores y propietarios de sitios web que desean maximizar el rendimiento web en un servidor Linux. Si ejecutas tu sitio en un plan de VPS Hosting o un Servidor Dedicado, este tutorial se aplica directamente a tu entorno.
Tabla de Contenidos
- ¿Qué es HTTP/2 y por qué es importante?
- Requisitos previos
- Paso 1 — Actualizar el índice de paquetes del sistema
- Paso 2 — Instalar Nginx
- Paso 3 — Instalar OpenSSL
- Paso 4 — Obtener un certificado SSL gratuito con Let’s Encrypt
- Paso 5 — Configurar Nginx para HTTP/2
- Paso 6 — Optimizar tu configuración de Nginx HTTP/2
- Paso 7 — Probar la configuración de Nginx
- Paso 8 — Reiniciar Nginx y aplicar cambios
- Paso 9 — Verificar que HTTP/2 está activo
- Solución de problemas comunes
- Conclusión
¿Qué es HTTP/2 y por qué es importante?
HTTP/2 es la segunda versión principal del Protocolo de Transferencia de Hipertexto, estandarizado en RFC 7540. Fue diseñado para abordar las limitaciones de rendimiento de HTTP/1.1, que ha estado en uso desde 1997.
Ventajas clave de HTTP/2 sobre HTTP/1.1:
| Característica | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Multiplexación | Una solicitud por conexión | Múltiples solicitudes simultáneas |
| Compresión de encabezados | Encabezados en texto plano | Compresión HPACK |
| Server push | No soportado | Soportado |
| Protocolo binario | Basado en texto | Framing binario |
| Reutilización de conexión | Limitada | Totalmente persistente |
| Latencia | Mayor | Significativamente reducida |
Para propietarios de sitios web, habilitar HTTP/2 se traduce directamente en cargas de página más rápidas, mejores puntuaciones de Core Web Vitals y rankings de SEO mejorados — ya que Google utiliza la velocidad de página como señal de clasificación.
> Importante: HTTP/2 requiere HTTPS (TLS/SSL). No puedes ejecutar HTTP/2 sobre una conexión sin encriptar en ningún navegador moderno. Por eso obtener un certificado SSL es un paso obligatorio en esta guía. Si necesitas un certificado de confianza para tu dominio, AlexHost ofrece Certificados SSL para todos los casos de uso.
Requisitos previos
Antes de comenzar, asegúrate de tener lo siguiente en su lugar:
- Un servidor ejecutando Ubuntu 20.04 LTS o Ubuntu 22.04 LTS (los pasos son casi idénticos para ambos)
- Un usuario no root con privilegios de
sudoo acceso directo root - Un nombre de dominio registrado apuntando a la dirección IP de tu servidor a través de un registro A
- Puertos 80 y 443 abiertos en tu firewall (UFW o iptables)
- Familiaridad básica con la línea de comandos de Linux
Si aún no tienes un dominio, puedes registrar uno directamente a través de Registro de Dominios de AlexHost y apuntarlo a tu servidor en cuestión de minutos.
Paso 1 — Actualizar el índice de paquetes del sistema
Siempre comienza actualizando tu índice de paquetes para asegurar que estés instalando las versiones más recientes disponibles de todo el software:
sudo apt update && sudo apt upgrade -yEste comando actualiza la lista de paquetes local y actualiza cualquier paquete obsoleto ya instalado en tu sistema.
Paso 2 — Instalar Nginx
Instalar el paquete Nginx
Los repositorios predeterminados de Ubuntu incluyen una versión estable de Nginx. Instálalo con:
sudo apt install nginx -yIniciar el servicio Nginx
Una vez instalado, inicia el servicio Nginx inmediatamente:
sudo systemctl start nginxHabilitar Nginx para que se inicie automáticamente al arrancar
Asegúrate de que Nginx se lance automáticamente cada vez que el servidor se reinicie:
sudo systemctl enable nginxVerificar que Nginx está ejecutándose
Confirma que el servicio está activo y en ejecución:
sudo systemctl status nginxDeberías ver una salida similar a:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since ...Permitir Nginx a través del firewall
Si UFW está activo en tu servidor, permite el tráfico HTTP y HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw statusNginx Full abre tanto el puerto 80 (HTTP) como el puerto 443 (HTTPS), ambos requeridos para esta configuración.
Paso 3 — Instalar OpenSSL
HTTP/2 depende de TLS, que a su vez depende de OpenSSL. Instálalo para asegurar que todas las dependencias criptográficas estén disponibles:
sudo apt install openssl -yVerifica la versión instalada:
openssl versionDeberías ver una salida como OpenSSL 3.0.x o similar. Cualquier versión superior a 1.0.2 soporta completamente los conjuntos de cifrado requeridos para HTTP/2.
Paso 4 — Obtener un certificado SSL gratuito con Let’s Encrypt
Let’s Encrypt proporciona certificados SSL/TLS gratuitos y renovables automáticamente de confianza para todos los navegadores principales. El cliente Certbot hace que todo el proceso sea sencillo.
Instalar Certbot y el plugin de Nginx
sudo apt install certbot python3-certbot-nginx -ySolicitar tu certificado SSL
Reemplaza your_domain.com con tu nombre de dominio registrado real:
sudo certbot --nginx -d your_domain.com -d www.your_domain.comCertbot hará lo siguiente:
- Verificar la propiedad del dominio a través de un desafío HTTP
- Emitir el certificado desde Let’s Encrypt
- Modificar automáticamente tu configuración de Nginx para usar el certificado
- Configurar redirecciones HTTPS desde HTTP
Sigue los mensajes interactivos. Cuando se te pregunte si redirigir el tráfico HTTP a HTTPS, selecciona opción 2 (Redirigir) — esta es la opción recomendada.
Verificar la renovación automática del certificado
Los certificados de Let’s Encrypt expiran después de 90 días. Certbot instala un trabajo cron o temporizador systemd para renovarlos automáticamente. Prueba el proceso de renovación con una ejecución de prueba:
sudo certbot renew --dry-runSi no aparecen errores, la renovación automática está correctamente configurada.
> Consejo: Para entornos de producción con múltiples dominios o certificados comodín, considera un Servidor Dedicado para control completo sobre tu infraestructura SSL.
Paso 5 — Configurar Nginx para HTTP/2
Ahora que SSL está en su lugar, necesitas habilitar explícitamente HTTP/2 en la configuración del bloque de servidor de Nginx.
Abrir el archivo de configuración de Nginx
La configuración del sitio predeterminado se encuentra en:
sudo nano /etc/nginx/sites-available/defaultSi creaste un bloque de servidor personalizado para tu dominio (recomendado), abre ese archivo en su lugar:
sudo nano /etc/nginx/sites-available/your_domain.comActualizar el bloque de servidor para habilitar HTTP/2
Localiza la directiva listen 443 ssl;. Certbot habrá agregado esto automáticamente. Modifícalo para incluir http2:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain.com www.your_domain.com;
# SSL Certificate paths (set by Certbot)
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/your_domain.com/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP to HTTPS redirect block
server {
listen 80;
listen [::]:80;
server_name your_domain.com www.your_domain.com;
return 301 https://$host$request_uri;
}El cambio crítico está en la línea listen: agregar http2 después de ssl activa el protocolo HTTP/2 para ese host virtual.
Guardar y salir
Presiona CTRL + X, luego Y, luego Enter para guardar el archivo y salir del editor nano.
Paso 6 — Optimizar tu configuración de Nginx HTTP/2
Simplemente habilitar HTTP/2 es un buen comienzo, pero aplicar optimizaciones adicionales asegura que extraigas el máximo rendimiento de tu configuración.
Configuración recomendada de SSL y rendimiento
Agrega o verifica las siguientes directivas dentro de tu bloque server:
# Modern TLS protocols only
ssl_protocols TLSv1.2 TLSv1.3;
# Strong cipher suites compatible with HTTP/2
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# SSL session caching for performance
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# Additional security headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
# Gzip compression (complements HTTP/2)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;> Nota sobre HTTP/2 y Gzip: HTTP/2 utiliza su propia compresión de encabezados HPACK, pero habilitar Gzip para cuerpos de respuesta aún proporciona ahorros significativos de ancho de banda para activos basados en texto.
Paso 7 — Probar la configuración de Nginx
Nunca reinicies Nginx sin antes probar la configuración para errores de sintaxis. Un archivo mal configurado puede derribar todo tu servidor web.
Ejecuta la prueba de configuración integrada:
sudo nginx -tUna prueba exitosa produce:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successfulSi ves algún error, revisa cuidadosamente la salida. El mensaje de error incluirá el nombre del archivo y el número de línea donde se detectó el problema.
Paso 8 — Reiniciar Nginx y aplicar cambios
Una vez que la prueba de configuración pase, reinicia Nginx para aplicar todos los cambios:
sudo systemctl restart nginxAlternativamente, si prefieres una recarga sin tiempo de inactividad (que aplica cambios de configuración sin soltar conexiones activas):
sudo systemctl reload nginxPara la habilitación de HTTP/2 específicamente, se recomienda un reinicio completo para asegurar que las nuevas configuraciones de protocolo se inicialicen completamente.
Paso 9 — Verificar que HTTP/2 está activo
Después de reiniciar Nginx, confirma que HTTP/2 realmente se está sirviendo a los clientes usando uno de los siguientes métodos.
Método 1: Usando curl
La herramienta de línea de comandos curl puede reportar la versión del protocolo utilizado:
curl -I --http2 https://your_domain.comBusca el encabezado de respuesta:
HTTP/2 200Si ves HTTP/2 200, HTTP/2 está funcionando correctamente.
Método 2: Usando el comando OpenSSL
openssl s_client -connect your_domain.com:443 -alpn h2En la salida, busca:
ALPN protocol: h2h2 es el identificador ALPN para HTTP/2. Si ves esto, tu servidor está anunciando correctamente el soporte de HTTP/2 durante el apretón de manos TLS.
Método 3: Usando las herramientas de desarrollador del navegador
- Abre tu sitio web en Google Chrome o Mozilla Firefox
- Presiona
F12para abrir las herramientas de desarrollador - Navega a la pestaña Red
- Recarga la página (
F5oCtrl+R) - Haz clic derecho en cualquier encabezado de columna en la lista de solicitudes y habilita la columna Protocolo
- Deberías ver
h2listado como el protocolo para las solicitudes de tu dominio
Método 4: Usando una herramienta de prueba de HTTP/2 en línea
Visita https://tools.keycdn.com/http2-test e ingresa tu dominio. La herramienta confirmará si HTTP/2 está activo y proporcionará detalles adicionales sobre la configuración TLS de tu servidor.
Solución de problemas comunes
HTTP/2 no aparece en el navegador a pesar de la configuración
- Causa: El navegador almacenó en caché una conexión HTTP/1.1 anterior.
- Solución: Borra la caché y las cookies del navegador, o prueba en una ventana privada/incógnita.
nginx -t devuelve errores de certificado SSL
- Causa: Rutas de certificado incorrectas en el archivo de configuración.
- Solución: Verifica las rutas exactas usando
sudo ls /etc/letsencrypt/live/your_domain.com/y actualiza las directivasssl_certificateyssl_certificate_keyen consecuencia.
Puerto 443 no accesible
- Causa: Firewall bloqueando tráfico HTTPS.
- Solución: Ejecuta
sudo ufw allow 443/tcpy verifica consudo ufw status.
Certbot falla en la validación del dominio
- Causa: Registro A de DNS aún no propagado, o el puerto 80 está bloqueado.
- Solución: Verifica que tu dominio se resuelva a la IP correcta usando
dig your_domain.com A. Asegúrate de que el puerto 80 esté abierto para el desafío HTTP de ACME.
Error unknown directive "http2" en Nginx
- Causa: La versión de Nginx es demasiado antigua (anterior a 1.9.5) o fue compilada sin soporte de HTTP/2.
- Solución: Actualiza Nginx. En Ubuntu 20.04+, la versión del repositorio
