QUIC combat (1) Implementar NGINX compatible con HTTP3 a través de Quiche

He estudiado las características relacionadas con Quic antes, pero no las he construido. Recientemente, necesito crear un entorno de prueba de producción rápida en la empresa. Grabarlo también es conveniente para otras referencias de desarrollo que necesitan construir el entorno.

Hay muchos planos de construcción para QUIC y finalmente elegimos Quiche. CloudFlare ha implementado con éxito la implementación de QUIC basada en Quiche en el negocio de CDN y la solución es relativamente madura. Uno de los parches de Quiche es el parche NGINX, para implementar el protocolo HTTP3 Quic basado en Quiche y Google Boringssl.

Construí un clúster de nginx + upsync + consul, así que al compilar nginx, agregué el módulo upsync

Compile nginx compatible con HTTP3

1. Descarga nginx y 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

Aquí no volví a descargar quiche de github, sino que usé directamente el que descargó mi colega antes. La descarga de quiche es relativamente lenta. Cargué el paquete comprimido de quiche que usé en el recurso. Puedes descargarlo de mi recurso si lo necesita. Preste atención al directorio de almacenamiento de quiche.zip (/ opt / nginx-quic)

2. Instale el entorno dependiente relacionado
Para realizar QUIC, la compilación de NGINX debe usar bibliotecas relacionadas con quiche y archivos de biblioteca BoringSSL.

La compilación de BoringSSL requiere entornos CMake 3.0 o superior, Perl, GCC, Clang y Go.
QUICHE requiere Rust 1.38 o superior para su construcción.

## 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 

Una vez que la instalación se haya realizado correctamente, podrá ver la siguiente información sobre la versión:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

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

## 安装clang,go
yum install clang go -y

Inserte la descripción de la imagen aquí

3. Compile e instale formalmente 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

Preste atención a los directorios de archivos correspondientes a openssl, quiche y upsync aquí. Como estoy usando el quiche de mi colega, la ruta de almacenamiento del quiche debe ser la misma que la suya ( /opt/nginx-quic)

Problemas encontrados:

1) Inserte la descripción de la imagen aquí

Tengo este error porque la ruta donde se almacena quiche es incorrecta, así que lo puse en / opt / nginx-quic.

2)
Inserte la descripción de la imagen aquí
Verifique el archivo de registro de errores correspondiente

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

Inserte la descripción de la imagen aquí

Hay un problema con el compilador de C. Puede actualizar la versión de gcc. La versión de gcc 4.8 que usé al principio tiene problemas con la compilación. Realice las siguientes operaciones para actualizar a 7.3 y superior.

## 安装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

Si la actualización no se realiza correctamente, puede consultar este blog para instalar gcc 7.3
GCC 7.3.0 compilar e instalar

Si aparece el siguiente mensaje de error durante la compilación e instalación de gcc 7.3, simplemente instale bzip2. yum -y install bzip2

Inserte la descripción de la imagen aquí

Modificar el archivo de configuración

Una vez completada la compilación, simplemente modifique el archivo de configuración.

    # 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.confSimplemente inicie nginx con el comando.
Después de instalar nginx localmente, empaqueto los archivos en el directorio de instalación / opt / server / nginx y los implemento en aws.

Verifique que QUIC sea compatible

Finalmente, solo verifique si quic está en vigencia. Puede https://www.http3check.net/verificar si es compatible con http3 a través de la siguiente dirección. También puede verificar a
Inserte la descripción de la imagen aquí
través de Google Chrome, descargar Google Chrome Canary y configurar sus parámetros de inicio --enable-quic --quic-version=h3-29, después del inicio, y luego visitar nginx Path is fine
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Esto esta hecho

Materiales de referencia:

nginx habilitar http3.0

Utilice Quic de CloudFlare para implementar Quiche para implementar el protocolo HTTP3 Quic de NGINX

¿Cómo probar si un sitio web es compatible con HTTP / 3?

Supongo que te gusta

Origin blog.csdn.net/qq_35448165/article/details/108889061
Recomendado
Clasificación