使用nginx-quic支持HTTP/3

本文主要介绍使用nginx-quic和boringssl项目来对服务器进行升级支持HTTP/3协议。

1、背景介绍

nginx官方从1.19版本开始,新建立了一个分支,专门用来对QUIC进行支持,官网的链接点这里。注意该项目还处于早期的alpha版本,非常不建议用于生产环境。

The code is at an early alpha level of quality and should not be used in production.

nginx-quic的安装包可以在下面这里找到,由于还处于开发阶段,项目更新得非常快。

https://hg.nginx.org/nginx-quic/shortlog/quic

从官网的readme文件我们可以了解到,截止到2020年8月21日,nginx-quic项目目前只支持h3-27h3-28h3-29三个版本,再早期的草案版本并不支持,不过目前更新的速度非常快,变动也很大。

Currently we support IETF-QUIC draft-27, draft-28, draft-29.
Earlier drafts are NOT supported as they have incompatible wire format.

考虑到浏览器的兼容性,接下来我们主要基于h3-27版本进行测试。

同时需要注意的是openssl官方版本目前并不支持quic协议,官方于2020年2月给出的原因是目前quic并不稳定,还有很多版本需要迭代确定,它们需要优先把精力放在openssl3.0版本的开发上,等到openssl3.0版本开发完成了再来进行quic的支持。

So in conclusion; QUIC is on our minds, but it will not be included in the OpenSSL 3.0 release. We expect more tangible action to happen after we’ve released OpenSSL 3.0.

所以我们这里需要用到谷歌自己使用的openssl分支版本boringssl,这是谷歌对应的开源的自用的openssl版本,谷歌官方表示boringssl这个项目虽然开源了,但是并不建议大家在生产环境上广泛使用,因为它是根据谷歌自身的需求进行调整的,有些API可能并不稳定。

后续更新:2021年5月份,RFC 9000正式发布了HTTP3-QUIC。

rfc9000 (ietf.org)

2、编译安装nginx-quic

这里我们使用了CentOS7来进行编译安装

[root@tiny-centos7 nginx-quic-quic]# lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core

首先我们在系统中使用yum安装基本的编译工具,注意此次使用的很多软件工具和依赖都是需要较新版本的,因此后面会进行大量的编译安装,请确保机器拥有足够的性能(可能需要编译gcc)和良好的网络。主要需要使用到的工具软件的安装步骤如下:

2.1 yum安装依赖

需要注意的是这里安装所需要的软件很多,这里并不能全部列出来,但是除了列出来的软件对新版本有要求外,别的都可以直接使用yum进行安装,当然也可以自己根据需要编译安装新版本。

sudo yum group install "Development Tools"

需要注意的是网上有部分教程会让我们去安装build-essential,而这个套件在centos中是不存在的,我们直接安装Development Tools套件即可

2.2 编译安装cmake

cmake的版本必须要在3.0以上,cmake可以到这里下载https://cmake.org/download/

wget https://github.com/Kitware/CMake/releases/download/v3.18.2/cmake-3.18.2.tar.gz
tar -zxvf cmake-3.18.2.tar.gz
./bootstrap
gmake
make
make install

cmake --version

2.3 编译安装perl

perl的安装包可以从这里www.cpan.org/src下载。perl的版本需要尽可能新,否则可能会出现问题,这里使用的是5.32.0的稳定版本(截止2020-08-21)

wget https://www.cpan.org/src/5.0/perl-5.32.0.tar.gz
tar -zxvf perl-5.32.0.tar.gz
cd perl-5.32.0/
./Configure -des -Dprefix=/usr/local/perl
make -j8
make test
make install

# 注意最后检查一下系统默认的perl是否为我们新安装的perl
perl -v

# 如果不是则需要进行修改
# 查看默认的perl
which perl | xargs file

# 替换新安装的perl和原来的perl
mv /usr/bin/perl /usr/bin/perl.5.16.3
# 需要注意新安装的perl目录要根据前面编译的时候指定的目录来确定
ln -s /usr/local/perl/bin/perl /usr/bin/perl
# 再次检查
perl -v

2.4 安装golang

golang的安装配置比较简单,我们从https://golang.org/dl直接下载最新的稳定版本即可。

wget https://golang.org/dl/go1.15.linux-amd64.tar.gz
tar -zxvf go1.15.linux-amd64.tar.gz -C /usr/local
# 修改系统默认的go文件
ln -s /usr/local/go/bin/go /usr/bin/go

接下来的go环境变量同学们可以根据自己的实际需求进行配置。对于我个人而言,我直接在/etc/profile中添加下面的配置然后source生效即可。

export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=/home/gopath

2.5 编译安装gcc

CentOS7默认的gcc的版本太旧了,编译boringssl的时候会报错,我们手动编译安装新版本的gcc,这里使用的是10.2.0的版本。gcc的版本可以在这里下载http://ftp.gnu.org/gnu/gcc/

wget http://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz
tar -zxvf gcc-10.2.0.tar.gz
cd gcc-10.2.0/
# 解压完成后需要下载四个依赖,我们执行脚本即可直接下载,服务器网络不好的同学也可以手动下载
./contrib/download_prerequisites
# 这里需要对c和c++进行支持,为了节省时间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值