Cómo configurar HTTP/2 en Nginx

Dificultad: Intermedio
Tiempo de Lectura: 3 minutos

HTTP/2 es, como muchos saben, la segunda versión principal del conocido protocolo HTTP, ampliamente usado a través de Internet. Comenzó a ser soportado por la mayoría de los navegadores web a fines de 2015, aunque al día de hoy solo un porcentaje pequeño de todos los sitios web lo utilizan. HTTP/2 está basado en SPDY, una conocida tecnología desarrollada por Google que ayuda a mejorar la velocidad y seguridad de nuestras páginas.

La historia de HTTP/2

SPDY nació en las oficinas de Google en el año 2009, pero no fue recién hasta el año 2012 cuando comenzó a estar disponible para todo el público, inicialmente para el servidor Apache y posteriormente para Nginx.

La historia de HTTP/2 también comienza en el año 2012, a raíz de los avances obtenidos por SPDY, que en muchos casos lograba aumentar notablemente la velocidad de los sitios web. La IETF, una organización cuyo objetivo es mejorar Internet, formó un equipo especial para llevar adelante el desarrollo del nuevo protocolo.

La primera versión, una alfa temprana podríamos llamarla, fue dada a conocer a fines del mismo año, pero los navegadores más conocidos comenzaron a implementar el soporte para la versión completa recién tres años más tarde, durante 2015.

Finalmente, Google decidió dejar de lado el desarrollo de SPDY, optando en su lugar por el nuevo HTTP/2 y anunciando que su navegador, Chrome, dejará de soportar SPDY a partir de mayo de este año.

¿Cuáles son las ventajas de HTTP/2?

Las características principales de HTTP/2 son las siguientes:

  • Se utiliza una única conexión, la cual es capaz de manipular múltiples requests en forma paralela, al contrario de la versión anterior que requiere realizar múltiples conexiones.
  • Mediante la multiplexación se pueden realizar transferencias de datos entre el servidor y el cliente en forma paralela y sin necesidad de esperar a que finalice la anterior.
  • Se trata de un protocolo binario, que es más sencillo de usar en comparación los protocolos de texto de las versiones anteriores.
  • Se envían menos datos redundantes, lo cual no solo mejora la latencia, sino que además implica un menor uso de recursos a nivel de los servidores.
  • Server push: es una de las características principales del protocolo, y permite que el servidor se «anticipe» al usuario, enviando datos/información antes de que el usuario la solicite.
  • Se asignan más recursos a las peticiones que más lo necesiten, estableciendo prioridad entre unas y otras.
  • Las cabeceras se envían comprimidas, con el objetivo de reducir la latencia y consumo de recursos. Para llevarlo a cabo se utiliza el algoritmo HPACK.

El soporte oficial de SPDY llegó a su fin con el lanzamiento de HTTP/2. Debido a esto, el nuevo HTTP/2 ha comenzado a ser utilizado en lugar de SPDY y hoy vamos a ver cómo implementarlo con nuestro web server favorito: Nginx.

Configurar HTTP/2 en Nginx

El soporte para HTTP/2 a nivel de Nginx fue lanzado hace ya algunos meses, estando disponible a partir de la versión 1.9.5, aunque cabe mencionar que la misma es una versión aún en desarrollo (pertenece al tier Mainline), siendo la versión estable más reciente la 1.8.1. Aún así, para quienes se atrevan a usarlo, vamos a ver cómo habilitar HTTP/2 en Nginx.

Cabe mencionar que la rama 1.9.x de Nginx no tiene soporte para SPDY, este protocolo ha sido reemplazado completamente por HTTP/2.

Configurar HTTP2 en Nginx es un proceso sencillo

Verificaciones previas

Verifica que la versión de Nginx que tienes instalada soporta HTTP/2. Esto puedes verificarlo con el siguiente comando:

nginx -V

En el resultado que verás en la pantalla en una parte tendrá que decir lo siguiente:

--with-http_v2_module

Si no lo dice, es porque tu versión no soporta HTTP/2. Asegúrate de descargar la versión correcta desde la web oficial de Nginx.

Implementando HTTP2 en Nginx

Esto puede sonar complicado, pero en realidad se trata de una configuración extremadamente simple, de hecho basta con modificar una sola línea de nuestro archivo de configuración para habilitar HTTP/2.

En el archivo de configuración de tu sitio, busca el bloque correspondiente a HTTPS (HTTP/2 requiere que uses un certificado SSL) y reemplaza la siguiente línea:

listen 443 ssl;

Por esta:

listen 443 ssl http2;

Guarda el cambio y prueba la nueva configuración:

nginx -t

Si el resultado es satisfactorio ya puedes reiniciar Nginx para tomar el cambio:

service nginx restart

Ahora todos los visitantes de tu sitio estarán usando el protoclo HTTP/2, siempre y cuando usen un navegador moderno por supuesto. En caso de utilizar navegadores viejos, el sitio se despachará bajo el SSL regular (TLS 1.0, 1.1 o 1.2).

A tener en cuenta

  • Si estás utilizando algún firewall por delante de Nginx, asegúrate de que el mismo tenga soporte para HTTP/2, de lo contrario te podría dar problemas. Si no tiene soporte, lo ideal es que uses otro o bien que lo utilices por detrás de Nginx.
  • La función «Server Push» de HTTP/2 todavía no está soportada por Nginx.

Conclusión

Como hemos visto, el proceso de configurar HTTP2 en Nginx es sumamente sencillo, basta con editar el bloque de HTTPS de nuestro sitio y hacer el pequeño cambio que hemos mencionado, luego de eso reiniciar el servicio y los usuarios ya estarán navegando por tu web mediante el protocolo más reciente.

Cuéntanos: ¿pudiste configurar HTTP2 en Nginx? ¿Notas los cambios a nivel de rendimiento?


¿Te resultó útil el artículo? Compártelo con tus colegas: