Cómo Instalar Nginx con Soporte HTTP/2 en Ubuntu (Guía Completa)
Nginx es uno de los servidores web más 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 — habilitando 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.
¿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 | Encuadre binario |
| Reutilización de conexión | Limitada | Completamente 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 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 cifrar en ningún navegador moderno. Por eso obtener un certificado SSL es un paso obligatorio en esta guía. Si necesitas un certificado confiable 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
sudoprivilegios o acceso root directo - 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 desactualizado 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 iniciar automáticamente al arrancar
Asegúrate de que Nginx se inicie 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 cifras 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 confiables por todos los navegadores principales. El cliente Certbot hace que todo el proceso sea sencillo.
Instalar Certbot y el complemento 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 deseas 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á configurada correctamente.
> 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 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 HTTP/2 de Nginx
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 SSL y de rendimiento recomendada
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 descartar conexiones activas):
sudo systemctl reload nginxPara la habilitación de HTTP/2 específicamente, se recomienda un reinicio completo para asegurar que la nueva configuración del protocolo se inicialice 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 herramientas de desarrollador del navegador
- Abre tu sitio web en Google Chrome o Mozilla Firefox
- Presiona
F12para abrir 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 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 más antigua.
- 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: El firewall bloquea el tráfico HTTPS.
- Solución: Ejecuta
sudo ufw allow 443/tcpy verifica consudo ufw status.
Certbot falla en la validación del dominio
- Causa: El registro A de DNS aún no se ha 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 predeterminado soporta HTTP/2. También puedes agregar el PPA oficial de Nginx:
sudo add-apt-repository ppa:nginx/stable && sudo apt update && sudo apt upgrade nginx.
en todos los servicios de hosting