早在4年前,nginx 就有了关于支持 QUIC 协议(即现在的HTTP3)的相关讨论,并且官方明确表示将在1.17版本加入支持,但他们搞的实在是太慢啦!

不过这也正常,nginx 一向非常严谨,和我一样想体验HTTP3的朋友,除了换服务端之外,我们另一个选择就是使用一些非官方的 nginx 补丁,本文就教大家使用知名 CDN 服务商 cloudflare 开源的一个补丁,它基于自家的 quiche,quiche是IETF指定的QUIC传输协议和HTTP / 3的实现。

话不多说,我们立即开始!

准备工作

强烈建议您备份 /etc/nginx 的配置文件,并移除已经安装的nginx,方便编译安装后还原。

本文操作环境为 ubuntu 18.04 server,其他发行版部分操作可能会有所不同,请注意变通。

  1. 一台 64位 linux设备
  2. 你可能需要安装 gcc、cmake、golang、cargo 等编译工具
  3. 可以高速访问github的网络环境或代理服务器

获取源码

1.获取 nginx 和 quiche 的源代码

curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche

2.解压 nginx 源码

tar xzvf nginx-1.16.1.tar.gz

编译前配置

1.切换进 nginx 目录,写入 cloudflare 的补丁

cd nginx
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch

2.进行 configure

 ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx           --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:安装位置
  • sbin-path:可执行文件的安装位置
  • conf-path:配置文件位置
  • error-log-path:错误日志位置
  • http-log-path:http日志位置
  • pid-path:pid文件位置
  • lock-path:lock文件位置
  • user:运行nginx所用的用户
  • group:运行nginx所用的用户组
  • with-openssl:设置openssl,这里我们使用quiche依赖的boringssl
  • with-quiche:设置quiche,这里我们使用刚刚从github整下来的quiche
注意:configure 时可能会遇到没有安装xxx库,这个时候请善用搜索引擎补全依赖。

编译安装

make,之后等待编译完毕。(可能会遇到找不到 xxx 命令,这个时候请善用搜索引擎安装这些工具 )

make

等待编译完毕后执行 make install 即可

make install

之后还原 /etc/nginx 的配置文件,并配置quic,您可以参考以下代码:

http {
    server {
        # Enable QUIC and HTTP/3.
        listen 443 quic reuseport;

        # Enable HTTP/2 (optional).
        listen 443 ssl http2;

        ssl_certificate      cert.crt;
        ssl_certificate_key  cert.key;

        # Enable all TLS versions (TLSv1.3 is required for QUIC).
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        # Add Alt-Svc header to negotiate HTTP/3.
        add_header alt-svc 'h3-27=":443"; ma=86400';
    }
}

最后,启动你的 nginx 就大功告成啦!

systemctl start nginx

测试 HTTP3

您可以使用 Chrome Canarycurl 等客户端测试,也可使用 http3check.net 等网站在线测试。


0 条评论

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注