Habilitar HTTP/2 en GNU Linux con NGINX

HTTP/2 es la mayor revisión del protocolo de red HTTP y está enfocado a mejoras en el rendimiento. El objetivo es reducir la latencia y hacer que las aplicaciones web sean más rápidas, permitiendo así múltiples peticiones simultáneas, entre el navegador web y el servidor, a través de una sola conexión TCP.

Infografía http/2

En el artículo de hoy veremos cómo habilitar HTTP/2 en nuestro servidor con NGINX, utilizando una distribución GNU Linux, concretamente Debian Jessie.

Importante remarcar que HTTP/2 es compatible con las últimas versiones de las distribuciones, en Debian, por ejemplo, está disponible a partir de la versión 7 y 8, utilizando la versión de NGINX 1.9.5 hacia delante.

Requisitos

El más importante es que tengamos ya NGINX instalado y asegurarnos que sea funcional. Para ello sólo debemos escribimos el siguiente comando:

  1. sudo nginx -t

Adicionalmente, debemos tener permisos de superusuario con root o por lo menos que tenga privilegios, para así poder realizar cambios. Contamos que se utiliza un nombre de dominio FQDN y un certificado SSL, véase por ejemplo Let’s Encrypt.

Manos a la faena

Realmente no nos llevará muchos quebraderos de cabeza el cambio, simplemente debemos modificar el fichero de configuración de nuestro Virtual Host. Concreatamente:

  1. sudo nano /etc/nginx/sites-available/default

Debería quedar una cosa similar a la siguiente:

  1. server {  
    
  2.         server_name domain.com www.domain.com;
    
  3.         listen 443 ssl http2 default_server;
    
  4.         root /var/www/html;
    
  5.         index index.html;
    
  6.  
  7.         location / {
    
  8.                 try_files $uri $uri/ =404;
    
  9.         }
    
  10.  
  11.         ssl_certificate /etc/nginx/ssl/domain.com.crt;
    
  12.         ssl_certificate_key /etc/nginx/ssl/domain.com.key;
    
  13. }
    
  14.  
  15. server {
    
  16.        listen         80;
    
  17.        server_name    domain.com www.domain.com;
    
  18.        return         301 https://$server_name$request_uri;
    
  19. }

Evidentemente los datos se tendrían que cambiar, por ejemplo, el nombre de dominio por el que utilicemos. La ubicación de los certificados, deberán apuntar a donde los tengamos.

Para finalizar guardamos y reiniciamos el servicio:

  1. sudo systemctl restart nginx.service

Con esto ya lo tendremos listo.