返回介绍

介绍

其他

How-To

开发

模块参考

QUIC 和 HTTP/3 支持

发布于 2024-08-13 23:46:27 字数 9222 浏览 0 评论 0 收藏 0

从1.25.0后,对 QUICHTTP/3 协议的支持可用。同时,1.25.0之后,QUIC 和 HTTP/3 支持在Linux二进制包 (binary package)中可用。

QUIC 和 HTTP/3 支持是实验性的,请谨慎使用。

从源码构建

使用configure命令配置构建。请参考从源码构建 nginx 以获得更多细节。

当配置nginx时,可以使用 --with-http_v3_module 配置参数来启用 QUIC 和 HTTP/3。

构建nginx时建议使用支持 QUIC 的 SSL 库,例如 BoringSSLLibreSSL,或者 QuicTLS。否则,将使用不支持早期数据OpenSSL兼容层。

使用以下命令为 nginx 配置 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"

或者,可以使用 QuicTLS 配置 nginx:

./configure
  --with-debug
  --with-http_v3_module
  --with-cc-opt="-I../quictls/build/include"
  --with-ld-opt="-L../quictls/build/lib"

或者,可以使用现代版本的 LibreSSL 配置 nginx:

./configure
  --with-debug
  --with-http_v3_module
  --with-cc-opt="-I../libressl/build/include"
  --with-ld-opt="-L../libressl/build/lib"

配置完成后,使用 make 编译和安装 nginx。

配置

ngx_http_core_module 模块中的 listen 指令获得了一个新参数 quic,它在指定端口上通过启用 HTTP/3 over QUIC。

除了 quic 参数外,还可以指定 reuseport 参数,使其在多个工作线程中正常工作。

有关指令列表,请参阅 ngx_http_v3_module

启用地址验证:

quic_retry on;

启用 0-RTT:

ssl_early_data on;

启用 GSO (Generic Segmentation Offloading):

quic_gso on;

为多个 token 设置 host key:

quic_host_key <filename>;

QUIC 需要 TLSv1.3 协议版本,该版本在 ssl_protocols 指令中默认启用。

默认情况下,GSO Linux 特定优化处于禁用状态。如果相应的网络接口配置为支持 GSO,请启用它。

配置示例

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 {
    # for better compatibility it's recommended
    # to use the same port for quic and https
    listen 8443 quic reuseport;
    listen 8443 ssl;

    ssl_certificate   certs/example.com.crt;
    ssl_certificate_key certs/example.com.key;

    location / {
      # required for browsers to direct them to quic port
      add_header Alt-Svc 'h3=":8443"; ma=86400';
    }
  }
}

故障排除

一些可能有助于识别问题的提示:

  • 确保 nginx 是使用正确的 SSL 库构建的。
  • 确保 nginx 在运行时使用正确的 SSL 库(nginx -V 显示当前使用的内容)。
  • 确保客户端实际通过 QUIC 发送请求。建议从简单的控制台客户端(如 ngtcp2)开始,以确保服务器配置正确,然后再尝试使用可能对证书非常挑剔的真实浏览器。
  • 使用调试支持构建nginx并检查调试日志。它应包含有关连接及其失败原因的所有详细信息。所有相关消息都包含“quic”前缀,可以轻松过滤掉。
  • 为了进行更深入的调查,可以使用以下宏启用其他调试: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"
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文