Cloudflare ofrece un módulo para soportar HTTP/3 en NGINX

octubre 17, 2019 , 0 Comments

Cloudflare

Cloudflare ha preparado un módulo para proporcionar soporte para el protocolo HTTP/3 en NGINX. El módulo se realiza en forma de un complemento sobre la biblioteca de quiche desarrollado en Cloudflare con la implementación del protocolo de transporte QUIC y HTTP/3. El código de quiche está escrito en Rust, pero el módulo para NGINX está escrito en C y accede a la biblioteca mediante enlaces dinámicos. Las horas de operación están abiertas bajo la licencia BSD.

Desde el software del cliente, el soporte HTTP/3 ya se ha agregado a las compilaciones experimentales de Chrome Canary y la utilidad curl. Del lado del servidor, hasta ahora se ha requerido el uso de implementaciones de prueba aisladas que tienen capacidades limitadas. La capacidad de manejar HTTP/3 en nginx simplificará significativamente la implementación de servidores con soporte HTTP/3 y hará que la implementación de prueba del nuevo protocolo sea más accesible.

HTTP/3 estandariza el uso del protocolo QUIC como transporte para HTTP/2. El protocolo QUIC fue desarrollado por Google como una alternativa a TCP + TLS para la Web, con lo cual se pretende resolver problemas con un gran tiempo de compuestos de instalación y de coordinación en TCP y retrasos eliminación de la pérdida de paquetes durante la transmisión de datos. QUIC es un complemento del protocolo UDP que admite la multiplexación de múltiples conexiones y proporciona métodos de cifrado equivalentes a TLS/SSL.

Dentro de las características clave de QUIC que se destacan:

  • Alta seguridad, similar a TLS (de hecho, QUIC proporciona la capacidad de usar TLS sobre UDP).
  • Control de integridad de flujo que evita la pérdida de paquetes.
  • La capacidad de establecer una conexión al instante (0-RTT, en aproximadamente el 75% de los casos, los datos se pueden transferir inmediatamente después de enviar el paquete de configuración de la conexión) y garantizar retrasos mínimos entre el envío de una solicitud y la recepción de una respuesta (RTT, Tiempo de ida y vuelta).
  • No usar el mismo número de secuencia al retransmitir un paquete, lo que evita la ambigüedad en la determinación de los paquetes recibidos y elimina los tiempos de espera.
  • La pérdida de un paquete afecta la entrega de solo el flujo asociado con él y no detiene la entrega de datos en flujos transmitidos en paralelo a través de la conexión actual.
  • Herramientas de corrección de errores que minimizan los retrasos debido a la retransmisión de paquetes perdidos. El uso de códigos especiales de corrección de errores a nivel de paquete para reducir situaciones que requieren la retransmisión de datos de paquetes perdidos.
  • Los límites de los bloques criptográficos están alineados con los límites de los paquetes QUIC, lo que reduce el efecto de la pérdida de paquetes en la decodificación del contenido de los siguientes paquetes
  • No hay problemas con el bloqueo de la cola TCP
  • Soporte para el identificador de conexión, que reduce el tiempo para establecer una reconexión para clientes móviles
  • Capacidad para conectar mecanismos avanzados para controlar la sobrecarga de la conexión
  • Usando la técnica de predecir el ancho de banda en cada dirección para asegurar una intensidad óptima de envío de paquetes, evitando que llegue a un estado de congestión en el que se observa la pérdida de paquetes
  • Rendimiento notable y ganancias de rendimiento sobre TCP. Para servicios de vídeo como YouTube, QUIC mostró una reducción del 30% en las operaciones de re-almacenamiento en búfer al mirar vídeos.

¿Cómo implementar el módulo de soportar HTTP/3 en NGINX?

Para quienes estén interesados en poder implementar este módulo en su servidor, podrán hacerlo siguiendo las instrucciones que compartimos a continuación.

Para compilarlo, simplemente tienen que descargar el parche para nginx 1.16 y el código de la biblioteca de quiche.

curl -O https://nginx.org/download/nginx-1.16.1.tar.gz

tar xzvf nginx-1.16.1.tar.gz

git clone --recursive https://github.com/cloudflare/quiche

cd nginx-1.16.1

patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

Y compilamos NGINX con soporte HTTP/3 habilitado:

 ./configure                                 \

--prefix=$PWD                           \

--with-http_ssl_module                  \

--with-http_v2_module                   \

--with-http_v3_module                   \

--with-openssl=../quiche/deps/boringssl \

--with-quiche=../quiche

make

Durante la compilacion, el soporte de TLS debe basarse en la biblioteca BoringSSL (“–with-openssl = .. / quiche / deps / boringssl”), aún no se admite el uso de OpenSSL.

Para aceptar conexiones en la configuración, deberán agregar la directiva de escucha con el indicador “quic”.


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.