,

Habilitando protocolo HTTP/3 em servidores Nginx

A versão mainline 1.25.0 do Nginx finalmente trouxe suporte ao protocolo HTTP/3 de forma experimental na distribuição Linux. O recurso trará uma experiência com menor latência, melhor performance e segurança para os usuários, e deverá ser o padrão da web em um futuro próximo.

Este site, que usa servidor Nginx, já está habilitado para conexões via HTTP/3.

O HTTP/3 é a versão mais recente do protocolo responsável por transferência de dados entre clientes e servidores na web. A diferença é que nessa nova versão a comunicação acontece na camada de rede pelo protocolo UDP (User Datagram Protocol), ao invés do TCP (Transmission Control Protocol).

Como funciona o HTTP/3

Ao contrário do TCP, caraterizado na confiabilidade na entrega de pacotes de dados através de verificação de erros, o protocolo UDP ignora a verificação de integridade de pacotes. Ele simplesmente os envia, assumindo que o receptor recebeu com sucesso todos os dados, mesmo que isso não aconteça de fato.

Isso torna o protocolo UDP mais rápido do que o TCP, mas pode prejudicar a confiabilidade das informações, já que há a possibilidade de perda de pacotes.

Para solucionar esse problema, o protocolo HTTP/3 usa o QUIC (Quick UDP Internet Connections) na camada de transporte. É um padrão criado pelo Google que permite retransmissão de dados perdidos de forma independente, sem perda de velocidade. Ou seja, traz a característica de consistência de dados do protocolo TCP para o UDP.

Além de latência reduzida, o HTTP/3 trará uma experiência melhor em mudanças de rede – de uma conexão Wi-Fi para uma conexão 5G, por exemplo. E, por padrão, todas as conexões acontecem de modo criptografado.

Ajustes de rede

Antes de tudo é necessário verificar e, se for o caso, habilitar a porta 443 do protocolo UDP nas regras de firewall do seu servidor. O Nginx utilizará o protocolo na mesma porta utilizada pelas conexões SSL.

Configuração básica no Nginx

Para funcionar, o QUIC necessita da versão 1.3 do protocolo Transport Layer Security (TLS) listada na lista de protocolos aceitos. Ele provavelmente já está listado no seu arquivo de configuração, mas adicione se necessário.

http {
   ...

   ssl_protocols TLSv1.3;
   
   ...
}

Abaixo, as configurações básicas no bloco server. O servidor ouve a mesma porta 443 também para as conexões via QUIC. Além disso, habilita o HTTP/3 e adiciona um cabeçalho para avisar o navegador que há disponibilidade do uso do QUIC e em qual porta irá conectar.

server {
   listen 443 ssl;
   listen 443 quic reuseport;
   
   http3 on;
   add_header Alt-Svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';

   ...
}

Existem outras diretivas que podem ser aplicadas, como validação de requisição. Outras informações podem ser obtidas na documentação e no blog do Nginx.

Avatar de Matheus Misumoto