Cómo habilitar HTTP/2.0 en Nginx


HTTP/2 es el último estándar para el protocolo HTTP, es el sucesor de HTTP/1.1. Se está volviendo cada vez más popular debido a los beneficios que brinda a los desarrolladores web y a los usuarios en general. Proporciona un transporte optimizado para la semántica HTTP al admitir todas las características principales de HTTP/1.1, pero tiene como objetivo ser más eficiente en múltiples formas.

Hay muchas características además de HTTP/2 que le brindan más posibilidades para optimizar un sitio web/aplicación. Ofrece verdadera multiplexación y simultaneidad, mejor compresión de encabezado (codificación binaria), mejor priorización, mejores mecanismos de control de flujo y un nuevo modo de interacción llamado "servidor push" que permite al servidor enviar respuestas a un cliente. Sin mencionar que HTTP/2 se basa en el protocolo SPDY experimental de Google.

Por lo tanto, el enfoque principal de HTTP/2 es reducir el tiempo total de carga de la página web, mejorando así el rendimiento. También se centra en el uso de los recursos de la red y del servidor, así como en la seguridad porque, con HTTP/2, el cifrado SSL/TLS es obligatorio.

En este artículo, aprenderá cómo habilitar Nginx con soporte HTTP/2 en servidores Linux.

  • Una instalación funcional de NGINX versión 1.9.5 o superior, construida con el módulo ngx_http_v2_module.
  • Asegúrese de que su sitio utilice un certificado SSL/TLS; si no tiene uno, puede obtenerlo mediante un certificado autofirmado.

Puede instalar NGINX o implementarlo con una pila LEMP como se describe en las siguientes guías:

  • Cómo instalar Nginx en CentOS 8
  • Cómo instalar el servidor LEMP en CentOS 8
  • Cómo instalar NGINX, MySQL/MariaDB y PHP en RHEL 8
  • Cómo instalar LEMP Stack con PhpMyAdmin en Ubuntu 20.04
  • Instale Nginx con bloques de servidor (hosts virtuales) en Debian 10
  • Cómo usar Nginx como un balanceador de carga HTTP en Linux

Cómo habilitar HTTP/2.0 en NGINX

Si tiene NGINX instalado, verifique que se creó con el módulo ngx_http_v2_module ejecutando el siguiente comando.

# strings /usr/sbin/nginx | grep _module | grep -v configure| sort | grep ngx_http_v2_module

Una vez que tenga un sitio web/aplicación que esté siendo atendido por NGINX con HTTPS configurado, abra el archivo de bloque de servidor virtual (o host virtual) de su sitio web para editarlo.

# vi /etc/nginx/conf.d/example.com.conf                    [On CentOS/RHEL]
$ sudo nano /etc/nginx/sites-available/example.com.conf    [On Ubuntu/Debian]

Puede habilitar la compatibilidad con HTTP/2 simplemente agregando el parámetro http2 a todas las directivas listen como se muestra en la siguiente captura de pantalla.

listen 443 ssl http2;

La configuración de bloque de servidor de muestra se ve a continuación.

server {
        server_name example.com www.example.com;
        access_log  /var/log/nginx/example.com_access.log;
        error_log  /var/log/nginx/example.com_error.log;

        listen [::]:443 ssl ipv6only=on http2; # managed by Certbot
        listen 443 ssl http2; # managed by Certbot

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot    
}

Guarde los cambios en el archivo y ciérrelo.

Luego verifique la sintaxis de configuración de NGINX, si está bien, reinicie el servicio Nginx.

# nginx -t
# systemctl restart nginx

A continuación, abra un navegador web para verificar si su sitio web se sirve a través de HTTP/2.

http://www.example.com

Para acceder a los encabezados HTTP, haga clic con el botón derecho en la página web que se muestra, seleccione Inspeccionar de la lista de opciones para abrir las herramientas de desarrollador, luego haga clic en la pestaña Red y vuelva a cargar la página.

Verifique en Protocolos para ver cuál está usando su sitio (si no ve el encabezado Protocolos, haga clic con el botón derecho en cualquiera de los encabezados, por ejemplo, Nombre, luego marque Protocolo en la lista para mostrarlo como un encabezado).

Si su sitio se ejecuta en HTTP/1.1, en Protocolo, verá http/1.1 como se muestra en la siguiente captura de pantalla.

Si se ejecuta en HTTP/2, en Protocolo, verá h2 como se muestra en la siguiente captura de pantalla. Es posible que desee deshabilitar la memoria caché del navegador para ver el contenido más reciente que se sirve directamente desde el servidor web.

¡Eso es todo! Para obtener más información, consulte la documentación del módulo ngx_http_v2_module. No dude en hacer preguntas a través del formulario de comentarios a continuación.