Como Configurar uma Instância Mastodon Atrás do Nginx com HTTP/3
🔍 WiseChecker

Como Configurar uma Instância Mastodon Atrás do Nginx com HTTP/3

Executar uma instância Mastodon exige um servidor web confiável para lidar com conexões de clientes e proxy de requisições para o servidor da aplicação Mastodon. O Nginx é o proxy reverso mais comum para Mastodon, e habilitar HTTP/3 nele traz estabelecimento de conexão mais rápido e melhor desempenho em redes instáveis. O HTTP/3 usa o protocolo de transporte QUIC em vez do TCP, reduzindo a latência para usuários em todo o mundo. Este guia explica como configurar o Nginx para servir uma instância Mastodon com suporte a HTTP/3.

Principais Pontos: Configuração de HTTP/3 no Nginx para Mastodon

  • Arquivo de configuração do Nginx: O nginx.conf principal ou o arquivo específico do site deve incluir a diretiva listen com as flags quic e reuseport para HTTP/3.
  • Cadeia de certificados SSL: Um certificado TLS válido do Let’s Encrypt ou outra CA é necessário; HTTP/3 exige TLS 1.3.
  • Regra de firewall para a porta UDP 443: HTTP/3 usa UDP, então o firewall do servidor deve permitir tráfego UDP de entrada na porta 443.

ADVERTISEMENT

Entendendo o HTTP/3 e seus Pré-requisitos para Mastodon

O HTTP/3 é a terceira versão principal do Protocolo de Transferência de Hipertexto. Ele substitui o TCP pelo QUIC, um protocolo de transporte baseado em UDP. Para o Mastodon, isso significa que os usuários veem carregamentos de página mais rápidos, especialmente em redes móveis ou conexões com alta perda de pacotes. A aplicação Mastodon em si não precisa de alterações; a melhoria ocorre inteiramente no nível do proxy reverso.

Antes de habilitar o HTTP/3, confirme que seu sistema atende a estes requisitos:

Versão do Nginx

O suporte a HTTP/3 foi adicionado no Nginx 1.25.0. Execute nginx -v para verificar sua versão. Se você estiver em uma versão mais antiga, adicione o repositório oficial do Nginx ou compile o Nginx a partir do código-fonte com a flag --with-http_v3_module. Muitas distribuições Linux agora empacotam o Nginx com HTTP/3 habilitado por padrão.

Versão do OpenSSL

O QUIC depende do TLS 1.3. O OpenSSL 1.1.1 ou posterior suporta TLS 1.3, mas para melhor compatibilidade, use OpenSSL 3.x. Verifique com openssl version. Se seu sistema tiver um OpenSSL mais antigo, talvez seja necessário compilar o Nginx com uma versão mais nova do OpenSSL.

Firewall e Configuração de Rede

O HTTP/3 usa UDP na porta 443. A maioria dos firewalls de servidor permite apenas TCP por padrão. Abra a porta UDP 443 no iptables, ufw ou no grupo de segurança do seu provedor de nuvem. Se você usa uma CDN como Cloudflare, o HTTP/3 é tratado na borda da CDN e não requer alterações no servidor.

Passos para Configurar o Nginx para HTTP/3 em uma Instância Mastodon

Estas instruções assumem que você tem uma instância Mastodon funcionando atrás do Nginx. O arquivo de configuração geralmente está localizado em /etc/nginx/sites-available/mastodon ou dentro de /etc/nginx/conf.d/.

  1. Faça backup da configuração atual do Nginx
    Copie a configuração do site Mastodon existente: sudo cp /etc/nginx/sites-available/mastodon /etc/nginx/sites-available/mastodon.backup. Isso permite reverter se algo der errado.
  2. Edite o bloco server para a porta 443
    Abra o arquivo de configuração do Mastodon com um editor de texto: sudo nano /etc/nginx/sites-available/mastodon. Localize o bloco server que escuta na porta 443.
  3. Adicione a diretiva listen para HTTP/3
    Dentro desse bloco server, adicione a linha: listen 443 quic reuseport;. Coloque-a imediatamente após a linha listen 443 ssl existente. O parâmetro reuseport permite que múltiplos processos worker aceitem conexões QUIC na mesma porta.
  4. Adicione o cabeçalho Alt-Svc
    Dentro do mesmo bloco server, adicione: add_header Alt-Svc 'h3=":443"; ma=86400';. Este cabeçalho informa aos navegadores que HTTP/3 está disponível na porta 443. O valor ma=86400 define o tempo de vida do cache como 24 horas.
  5. Habilite TLS 1.3 na diretiva ssl_protocols
    Certifique-se de que sua configuração inclua ssl_protocols TLSv1.2 TLSv1.3;. HTTP/3 exige TLS 1.3, mas manter TLS 1.2 garante compatibilidade com clientes mais antigos.
  6. Verifique os caminhos do certificado SSL e da chave
    Confirme que as diretivas ssl_certificate e ssl_certificate_key apontam para arquivos válidos. HTTP/3 não funcionará sem um certificado TLS adequado.
  7. Teste a configuração do Nginx
    Execute sudo nginx -t para verificar erros de sintaxe. Se o teste falhar, revise a mensagem de erro e corrija o problema relatado.
  8. Recarregue o Nginx
    Aplique as alterações sem interromper conexões ativas: sudo systemctl reload nginx.
  9. Abra a porta UDP 443 no firewall
    Se você usa ufw, execute sudo ufw allow 443/udp. Para iptables, adicione uma regra: sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT. Salve a regra para que persista após reinicializações.
  10. Verifique se HTTP/3 está funcionando
    Use uma ferramenta de teste online como https://http3check.net ou o comando curl com a flag --http3: curl --http3 -I https://mastodon.example.com. Se a resposta incluir o cabeçalho Alt-Svc, HTTP/3 está ativo.

ADVERTISEMENT

Problemas Comuns ao Habilitar HTTP/3 no Mastodon

Nginx Falha ao Iniciar Após Adicionar a Diretiva quic

Se nginx -t relatar um erro de diretiva desconhecida, seu binário do Nginx foi compilado sem o módulo HTTP/3. Reinstale o Nginx a partir de um repositório que inclua suporte a HTTP/3, ou compile o Nginx com a flag --with-http_v3_module. No Ubuntu 22.04 e posteriores, o pacote Nginx padrão do repositório oficial inclui este módulo.

Navegadores Não Mudam para HTTP/3

O cabeçalho Alt-Svc deve ser enviado na primeira resposta HTTP/2. Se o cabeçalho estiver ausente, os navegadores não tentarão uma conexão QUIC. Verifique sua configuração com curl -I https://mastodon.example.com e procure pela linha alt-svc. Se estiver ausente, verifique se a diretiva add_header está dentro do bloco server correto e não dentro de um bloco location.

Tráfego UDP Bloqueado pelo Provedor de Nuvem

Alguns provedores de nuvem bloqueiam tráfego UDP por padrão ou exigem uma regra explícita no grupo de segurança. AWS, Google Cloud e Azure têm configurações separadas para UDP. Adicione uma regra personalizada para a porta UDP 443 no console da sua nuvem. Sem isso, os pacotes QUIC nunca chegam ao Nginx.

HTTP/2 vs HTTP/3 para Mastodon: Principais Diferenças

Item HTTP/2 HTTP/3
Protocolo de transporte TCP QUIC (UDP)
Estabelecimento de conexão Exige handshake TCP e TLS (2-3 viagens de ida e volta) Combina handshake em 1 viagem de ida e volta (0-RTT possível)
Multiplexação Conexão TCP única; bloqueio de cabeça de linha possível Streams independentes; sem bloqueio de cabeça de linha
Mudança na configuração do Nginx Nenhuma diretiva extra necessária além do SSL Exige listen quic reuseport e cabeçalho Alt-Svc
Requisito de firewall Apenas TCP 443 TCP 443 e UDP 443
Suporte a navegadores Todos os navegadores modernos Chrome, Firefox, Edge, Safari 14+

O HTTP/3 oferece melhorias mensuráveis para usuários do Mastodon em redes móveis ou congestionadas. A configuração é mínima e não afeta o código da aplicação Mastodon. Após habilitar o HTTP/3, monitore os logs de acesso do Nginx em busca de entradas relacionadas ao QUIC e verifique se seu servidor lida com tráfego HTTP/2 e HTTP/3 sem problemas. Você também pode ajustar parâmetros QUIC como quic_retry e quic_gso na configuração do Nginx para otimização avançada de desempenho.

ADVERTISEMENT