QUIC实战(一) 通过Quiche部署支持HTTP3 的NGINX

QUIC实战(一) 通过Quiche部署支持HTTP3 的NGINX之前研究了下 quic 相关的特性 不过一直没有去搭建过 最近需要在公司搭建一个 quic 的生产测试环境 记录一下也方便其他需要搭建环境的开发参考 QUIC 的搭建方案有很多 最后我们选择了 Quiche CloudFlare 已经成功在 CDN 业务中实现了基于 Quiche 的 QUIC 部署 该方案相对比较成熟

大家好,我是讯享网,很高兴认识大家。

之前研究了下quic相关的特性,不过一直没有去搭建过,最近需要在公司搭建一个quic的生产测试环境,记录一下也方便其他需要搭建环境的开发参考。

QUIC的搭建方案有很多,最后我们选择了Quiche。CloudFlare 已经成功在CDN业务中实现了基于Quiche的QUIC部署,该方案相对比较成熟。Quiche其中有一个patch就是NGINX补丁,为了实现基于Quiche和谷歌Boringssl 实现的HTTP3 Quic协议。

我搭建的是nginx+upsync+consul的集群,所以在编译nginx我将upsync模块也加入进去了

编译支持HTTP3的nginx

1.下载nginx和quiche

wget https://nginx.org/download/nginx-1.16.1.tar.gz git clone --recursive https://github.com/cloudflare/quiche  下载nginx-upsync-module wget https://github.com/weibocom/nginx-upsync-module/archive/master.zip 

讯享网

这里我并没有重新从github下载quiche,而是直接使用了之前同事下载的,quiche下载比较慢,我将使用的quiche压缩包上传到资源里了,需要的可以从我的资源里下载。注意下quiche.zip的存放目录(/opt/nginx-quic)

2.安装相关的依赖环境
为了实现QUIC,NGINX编译必须用到quiche的相关库及BoringSSL的库文件。

讯享网 cmake3 安装 wget https://cmake.org/files/v3.16/cmake-3.16.0-rc2.tar.gz tar xvzf cmake-3.16.0-rc2.tar.gz  安装编译依赖--- 这里安装了openssl,perl  yum install -y gcc-c++ make automake openssl-devel  开始编译 cd cmake-3.10.0-rc2/ ./bootstrap gmake gmake install 

安装成功后可以看到如下版本信息:
在这里插入图片描述
讯享网
在这里插入图片描述

 安装rust,同时也安装了cargo curl https://sh.rustup.rs -sSf | sh  生效环境变量 source $HOME/.cargo/env  安装clang,go yum install clang go -y 

在这里插入图片描述

3.正式编译安装nginx

讯享网 解压 如果提示命令不存在,则使用 yum -yinstall unzip安装 unzip nginx-upsync-module-master.zip tar zxvf nginx-1.16.1.tar.gz cd nginx-1.16.1 yum -y install patch patch -p01 < ../nginx-quic/quiche/extras/nginx/nginx-1.16.patch ./configure \ --prefix=/opt/server/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=../nginx-quic/quiche/deps/boringssl \ --with-quiche=../nginx-quic/quiche \ --add-module=../nginx-upsync-module-master 编译 make sudo make install 

注意下这里openssl,quiche以及upsync对应的文件目录。由于我使用的是同事的quiche,所以quiche的存放路径需要和他的写成一样的( /opt/nginx-quic )

遇到的问题:

1) 在这里插入图片描述

我就是由于存放quiche的路径不对导致出现该错误,放到/opt/nginx-quic之后就可以了。

2)
在这里插入图片描述
查看下对应错误日志文件

 cat /opt/nginx-quic/quiche/deps/boringssl/build/CMakeFiles/CMakeError.log 

在这里插入图片描述

C编译器有问题,可以升级下gcc的版本,我一开始使用的4.8版本的gcc编译就有问题,执行如下操作更新到7.3及以上就行了

讯享网 安装gcc7.3及以上   安装scl源,因为centos7默认安装的gcc就是4.8,使用其编译nginx会有问题 yum -y install centos-release-scl yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils 

编译安装gcc 7.3 过程中如果出现如下报错信息, 安装下bzip2 就可以了 yum -y install bzip2

在这里插入图片描述

修改配置文件

编译完成后,只要修改配置文件就可以了

 # Enable QUIC and HTTP/3. listen 443 quic reuseport; # Enable HTTP/2 (optional). listen 443 ssl http2;  http3 需要申请证书,将申请证书上传到服务器,然后在这里配置对应的存放目录 ssl_certificate /opt/ssl/fullchain.pem; ssl_certificate_key /opt/ssl/privkey.pem; # 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-29=":443"; ma=86400'; 

通过sbin/nginx -c conf/nginx.conf 命令启动nginx就可以了
我是先在本地安装好nginx之后,直接把安装目录/opt/server/nginx 下的文件打包然后在aws上部署就可以了

验证支持QUIC

最后就只要验证下quic是否有生效就可以了,可以通过如下地址https://www.http3check.net/来验证下是否支持http3
在这里插入图片描述
还可以通过谷歌浏览器来验证下,下载Google Chrome Canary 并设置其启动参数--enable-quic --quic-version=h3-29, 启动后,然后访问nginx的路径就可以了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样就搭建好了

参考资料:

nginx启用http3.0

使用CloudFlare的Quic实现Quiche部署NGINX的HTTP3 Quic协议

How to Test if a Website supports HTTP/3?

小讯
上一篇 2025-01-08 23:53
下一篇 2025-01-11 15:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/55441.html