Prise en charge de QUIC et HTTP/3
La prise en charge des protocoles QUIC et HTTP/3 est disponible depuis la version 1.25.0. De plus, depuis la version 1.25.0, la prise en charge de QUIC et HTTP/3 est disponible dans les paquets binaires Linux.
La prise en charge de QUIC et HTTP/3 est expérimentale, caveat emptor s'applique.
Construction à partir des sources
La construction est configurée à l'aide de la commande configure.
Lors de la configuration de nginx, il est possible d'activer QUIC et HTTP/3 à l'aide du paramètre de configuration --with-http_v3_module.
Une bibliothèque SSL fournissant la prise en charge de QUIC est recommandée pour construire nginx, comme BoringSSL, LibreSSL ou QuicTLS. Sinon, la couche de compatibilité OpenSSL sera utilisée et ne prend pas en charge les données précoces.
Utilisez la commande suivante pour configurer nginx avec BoringSSL :
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../boringssl/include" --with-ld-opt="-L../boringssl/build/ssl -L../boringssl/build/crypto" |
Alternativement, nginx peut être configuré avec QuicTLS :
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../quictls/build/include" --with-ld-opt="-L../quictls/build/lib" |
Alternativement, nginx peut être configuré avec une version moderne de LibreSSL :
./configure --with-debug --with-http_v3_module --with-cc-opt="-I../libressl/build/include" --with-ld-opt="-L../libressl/build/lib" |
Après la configuration, nginx est compilé et installé à l'aide de make.
Configuration
La directive listen du module ngx_http_core_module a reçu un nouveau paramètre quic activant HTTP/3 sur QUIC sur le port spécifié.
En plus du paramètre quic, il est également possible de spécifier le paramètre reuseport pour le faire fonctionner correctement avec plusieurs workers.
Pour activer la validation d'adresse :
quic_retry on; |
Pour activer 0-RTT :
ssl_early_data on; |
Pour activer le déchargement de segmentation générique (GSO) :
quic_gso on; |
Pour définir la clé d'hôte pour différents jetons :
quic_host_key filename; |
QUIC nécessite la version du protocole TLSv1.3 étant activée par défaut dans la directive ssl_protocols.
Par défaut, l'optimisation spécifique à GSO Linux est désactivée. Activez-la si une interface réseau correspondante est configurée pour prendre en charge GSO.
Exemple de configuration
http { log_format quic '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$http3"'; access_log logs/access.log quic; server { # pour une meilleure compatibilité, il est recommandé # d'utiliser le même port pour quic et https listen 8443 quic reuseport; listen 8443 ssl; ssl_certificate certs/example.com.crt; ssl_certificate_key certs/example.com.key; location / { # requis pour que les navigateurs les dirigent vers le port rapide add_header Alt-Svc 'h3=":8443"; ma=86400'; } } } |
Dépannage
Conseils pouvant aider à identifier les problèmes :
- Assurez-vous que nginx est créé avec la bibliothèque SSL appropriée.
- Assurez-vous que nginx utilise la bibliothèque SSL appropriée lors de l'exécution (le nginx -V indique ce qu'il utilise actuellement).
- Assurez-vous qu'un client envoie réellement des requêtes via QUIC. Il est recommandé de commencer avec un client de console simple tel que ngtcp2 pour garantir que le serveur est correctement configuré avant d'essayer avec de vrais navigateurs qui peuvent être assez pointilleux avec les certificats.
- Créez nginx avec la prise en charge du débogage et vérifiez le journal de débogage. Il doit contenir tous les détails sur la connexion et la raison de son échec. Tous les messages associés contiennent le préfixe « quic » et peuvent être facilement filtrés.
- Pour une enquête plus approfondie, un débogage supplémentaire peut être activé à l'aide des macros suivantes : NGX_QUIC_DEBUG_PACKETS, NGX_QUIC_DEBUG_FRAMES, NGX_QUIC_DEBUG_ALLOC, NGX_QUIC_DEBUG_CRYPTO.
./configure --with-http_v3_module --with-debug --with-cc-opt="-DNGX_QUIC_DEBUG_PACKETS -DNGX_QUIC_DEBUG_CRYPTO" |