使用 Cloudflare 开发的 quiche 为 Nginx 添加 HTTP/3支持

Nginx 官方也在去年 5 月声明了正在进行对 QUIC 支持的开发,也许将来会原生支持 QUIC(已经在做了.jpg)

涉及到 Nginx 的编译、Nginx 配置文件的编写

环境

  • Ubuntu 18.04 LTS
  • Nginx

参考

步骤

编译环境配置

尽管 quiche 的 GitHub 文档中写了安装步骤,但是没有给出其依赖和编译环境

以下编译环境的安装以一个全新的 Ubuntu 18.04 LTS 系统为准

  1. 安装依赖库
    • 更新并升级包
      sudo apt update
      sudo apt upgrade
    • 安装依赖
      sudo apt install libpcre3 libpcre3-dev zlib1g-dev
  2. 安装编译环境
    • nginx-quiche 编译需要 cmake、 go 和 rust
      sudo apt install cmake # cmake
      sudo apt install golang # golang
      curl https://sh.rustup.rs -sSf | sh # rust
    • 安装 rust 后,启用 cargo 指令
      # 在当前终端启用 cargo
      source $HOME/.cargo/env
      # 或者添加到PATH
      export PATH=$PATH:$HOME/.cargo/bin

Nginx QUIC 编译

quiche 只支持 1.16.x 版本的 Nginx

  1. 下载并解压 1.16.1 版本的 Nginx 源码
    curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
    tar zxvf nginx-1.16.1.tar.gz
  2. 下载 quiche 源码
    git clone --recursive https://github.com/cloudflare/quiche
  3. 将补丁导入 Nginx 源码(默认 nginx-1.16.1 与 quiche 在同级目录)
    cd nginx-1.16.1
    patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
  4. 配置 Nginx 编译文件,开启 HTTP/3 支持
    ./configure                                 
           --prefix=$PWD                           
           --build="quiche-$(git --git-dir=../quiche/.git rev-parse --short HEAD)" 
           --with-http_ssl_module                  
           --with-http_v2_module                   
           --with-http_v3_module                   
           --with-openssl=../quiche/deps/boringssl 
           --with-quiche=../quiche

    注意这里的 prefix 设为了当前目录,编译完成的 Nginx 也会默认在此目录下查找并加载配置文件

  5. 开始编译
    make

    编译完成的 Nginx,使用指令

    nginx -V

    查看版本号,nginx version 后标注了 (quiche-xxxxxxx) 代表 Nginx 已经开启 HTTP3/QUIC 支持

Continue reading “为 Nginx 添加 HTTP3/QUIC 支持”