提醒:本文最后更新于 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》