Quic已经作为了下一代http协议HTTP3的实现。以前给大家介绍过quic的实现智能依靠Golang的quic库实现。在web中的表现即为前文所述的CADDY服务器实现quic:CentOS7.6安装Caddy服务器及PHP7.4环境,实现QUIC配置。
作为web服务器两大扛把子Apache httpd和NGINX一直没有动静。httd目前为止是没有任何动静,但是NGINX有传言开发原生支持quic.但目前到了1.17.4版仍然没有测试版发出。
这个时候我们就要感谢边缘计算CDN行家CloudFlare了。他们家的特色就是精研各种有利于CDN类边缘计算web服务的开源技术实现。从他们以前支持 openresty 开源开发就可见一斑。最新消息 CloudFlare 已经成功在CDN业务中实现了QUIC的部署,那意思就是已经成熟了。其基于HTTP3 Quic的实现靠的就是他们开发的Quiche实现。其中有一个patch就是为了NGINX补丁实现基于其Quiche和谷歌Boringssl 实现的HTTP3 Quic协议。 https://blog.cloudflare.com/experiment-with-http-3-using-nginx-and-quiche/
言归正传,开工。注意:本文只探讨关于nginx编译实现quic
1.下载最新的nginx,解压缩
wget http://nginx.org/download/nginx-1.19.0.tar.gz tar xvzf nginx-1.19.0.tar.gz
2.下载最新的CloudFlare QUICHE及其子项目,其子项目就是BoringSSL.这里作了版本现在,我们下载的是发布的版本号,它的master版本一直在持续更新,会存在一些无法编译的bug.
git clone --recursive -b 0.4.0 https://github.com/cloudflare/quiche
3.运用QUCHE中的NGINX补丁包为NGINX打上补丁
cd nginx-1.19.0 patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
4.完成NGINX编译的关联软件
为了实现QUIC,NGINX编译必须用到quiche的相关库及BoringSSL的库文件。但这个两个东东编译起来有些软件是必须的,并且要求还挺高。难就难在这了。
BoringSSL编译需要CMake 3.0或更高版本 、 需要最新版本的Perl 环境、需要 GCC(4.8+)和Clang 、 需要Go语言最新稳定版本。
QUICHE Rust 1.38或更高版本才能构建。可以使用rustup安装最新的稳定Rust版本、新版本的 cargo命令
CMKAE和Perl环境更新安装请参照
CENTOS7安装最新版的CMKE3
CENTOS7安装最新Perl环境
安装 GCC(4.8+)和Clang、Go语言 ;安装Rust和 cargo
yum install gcc clang go rust cargo -y
5. NGINX编译设置
NGINX的configure设置必须包括以下设置:(注意删除原nginx编译设置中的openssl设置,这里它已经被boringssl取代)
--build="quiche-$(git --git-dir=../quiche/.git rev-parse --short HEAD)" --with-http_v3_module --with-openssl=../quiche/deps/boringssl --with-quiche=../quiche
6.编译完成NGINX配置文件设置
NGINX编译完成后建立自己的网站,NGINX网站配置文件中需包括以下配置,注意对应区块的位置。
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 'quic=":443"; ma=2592000; v="46,43",h3-27=":443"; ma=2592000,h3-25=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000'; } }
7.检查HTTP3开启效果:
在CHROME浏览器开发工具中NETWORK中点击对应页面,查看Response headers出现 alt-svc: h3-23=”:443″; ma=86400,即为正确实现了NGINX HTTP3:QUIC.
8.主要相关项目地址:
https://github.com/google/boringssl
https://github.com/cloudflare/quiche
https://github.com/kn007/patch/blob/master/nginx_with_quic.patch
发表回复