Cloudflare preparou um módulo para fornecer suporte para o protocolo HTTP / 3 em NGINX. O módulo está feito na forma de um snap na biblioteca de quiches desenvolvido na Cloudflare com a implementação do protocolo de transporte QUIC e HTTP / 3. O código quiche é escrito em Rust, mas o módulo para NGINX é escrito em C e acessa a biblioteca por meio de links dinâmicos. O horário de funcionamento está aberto sob a licença BSD.
Do software cliente, O suporte HTTP / 3 já foi adicionado às compilações experimentais do Chrome Canary e o utilitário curl. No lado do servidor, o uso de implementações de teste isoladas com recursos limitados foi necessário até agora. A capacidade de lidar com HTTP / 3 no nginx simplificará significativamente a implantação de servidores com suporte HTTP / 3 e tornará a implementação de teste do novo protocolo mais acessível.
HTTP / 3 padroniza o uso do protocolo QUIC como um transporte para HTTP / 2. O protocolo QUIC foi desenvolvido pelo Google como uma alternativa ao TCP + TLS para a Web, portanto pretende resolver problemas com um longo tempo de instalação e coordenação de compostos em TCP e atrasa a eliminação da perda de pacotes durante a transmissão de dados. QUIC é um plug-in para o protocolo UDP que oferece suporte à multiplexação de várias conexões e fornece métodos de criptografia equivalentes a TLS / SSL.
Entre as principais características do QUIC que se destacam:
- Alta segurança, semelhante ao TLS (na verdade, o QUIC fornece a capacidade de usar TLS sobre UDP).
- Controle de integridade de fluxo que evita a perda de pacotes.
- A capacidade de estabelecer uma conexão instantaneamente (0-RTT, em cerca de 75% dos casos, os dados podem ser transferidos imediatamente após o envio do pacote de configuração de conexão) e garantir atrasos mínimos entre o envio de uma solicitação e o recebimento de uma resposta (RTT, Round Trip Time) .
- Não usar o mesmo número de sequência ao retransmitir um pacote, o que evita ambigüidade na determinação dos pacotes recebidos e elimina tempos limite.
- A perda de um pacote afeta a entrega apenas do fluxo associado a ele e não para a entrega de dados em fluxos transmitidos em paralelo pela conexão atual.
- Ferramentas de correção de erros que minimizam atrasos devido à retransmissão de pacotes perdidos. O uso de códigos especiais de correção de erros no nível do pacote para reduzir as situações que exigem a retransmissão de dados perdidos do pacote.
- Os limites do bloco criptográfico são alinhados com os limites do pacote QUIC, reduzindo o efeito da perda de pacotes na decodificação do conteúdo dos pacotes subsequentes
- Sem problemas com o bloqueio da fila TCP
- Suporte para identificador de conexão, o que reduz o tempo para estabelecer uma reconexão para clientes móveis
- Capacidade de conectar mecanismos avançados para controlar a sobrecarga de conexão
- Usando a técnica de previsão da largura de banda em cada direção para garantir a intensidade de encaminhamento de pacote ideal, evitando que ele alcance um estado de congestionamento no qual seja observada perda de pacote
- Desempenho notável e ganhos de desempenho em relação ao TCP. Para serviços de vídeo como o YouTube, o QUIC mostrou uma redução de 30% nas operações de re-buffering ao assistir vídeos.
Como implementar o módulo para suportar HTTP / 3 em NGINX?
Para aqueles que estão interessados em implementar este módulo em seu servidor, Eles podem fazer isso seguindo as instruções que compartilhamos abaixo.
Para compilá-lo, eles só precisam fazer o download do patch para o nginx 1.16 e o código da biblioteca 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
E compilamos o NGINX com o suporte 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 a compilação, o suporte TLS deve ser baseado na biblioteca BoringSSL ("–with-openssl = .. / quiche / deps / boringssl"), o uso de OpenSSL ainda não é suportado.
Para aceitar conexões na configuração, eles precisarão adicionar a diretiva listener com o sinalizador "quic".