小试HTTP3

提醒:本文最后更新于 525 天前,文中所描述的信息可能已发生改变,请仔细核实。


CF最近推出了个项目quiche,用于为Nginx添加QUIC支持,并支持HTTP3。

具体可以查看传送门。为此,我也更新了patch,重新整合了下。因为SPDY早已过期,所以这次新的patch就没再整合进来。

Patch为Nginx添加了以下特性:

Add QUIC Support.
Add HTTP2 HPACK Encoding Support.
Add Dynamic TLS Record support.

需要spdy的话,可以用这个Patch

目前已知Arch、Ubuntu 18可以直接编译成功。

像Debian 10和CentOS 8,需要编译部分组件,特别是需要最新版的rust支持。

通过以下命令可以安装最新版rust:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

然后在shell界面通过

source $HOME/.cargo/env

来临时添加环境变量调用。

具体patch使用,可以见上面CF文章传送门,我这里也大概讲下。

支持Nginx稳定版(1.16)和主要分支(1.17)的最新版本。

首先,获取quiche项目备用:

git clone --recursive https://github.com/cloudflare/quiche

其次,进入到Nginx源码目录,打我的patch或者是CF的patch。

接着,编译参数除了自定参数外,添加以下参数:

--with-http_v3_module
--with-openssl=/path/to/quiche/deps/boringssl
--with-quiche=/path/to/quiche

注意,按照实际更改位置。然后编译即可。也可以参考下我之前的文章:《我的Nginx编译之旅

Nginx配置方面,在Server段,需要两个listen,一个是udp,也就是quic,一个是tcp,也就是正常的443 SSL这些。

并且,需要新增一个Header,还有TLS1.3支持。配置大概如下:

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;

    # Request buffering in not currently supported for HTTP/3.
    proxy_request_buffering off;
        
    # Add Alt-Svc header to negotiate HTTP/3.
    add_header alt-svc 'h3-27=":443"; ma=86400';
}

最早的时候,CF文章,忘记提示需要添加header,现在文章也已经有了。

其他就没啥坑了。

HTTP3测试可以通过quiche项目的工具检查,也可以通过这里检查。

不过讲道理,现在HTTP3没什么浏览器支持,QUIC也没多少支持的,虽说目前协议是已经是完善的了,但暂时仅限尝鲜。

但不得不吐槽的是Nginx官方速度真的慢,之前明明说好已经在给Nginx添加QUIC支持了,然后今年都快完了,还没弄出来。

另外quiche用了BoringSSL,而BoringSSL不支持OCSP Stapling,可以使用这个Patch解决。

自动更新OCSP Stapling File,请查看这篇文章《让Nginx使用BoringSSL时支持OCSP Stapling》。


然后目前博客服务器的Nginx已经rollback。。等以后再上了。

谈谈patch,下一版本,肯定是放弃spdy的了。

毕竟已经被废弃这么久了,加上明年上半年,主流浏览器也不会再支持TLS 1.0和TLS 1.1,那就更没有留的必要了。

我最迟可能也会在明年5月就取消这部分(SPDY、TLS 1.0和TLS 1.1)支持。

转载请注明转自:kn007的个人博客的《小试HTTP3