专栏首页日暮星辰使用CloudFlare的Quic实现Quiche部署NGINX的HTTP3 Quic协议

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

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 https://nginx.org/download/tar xvzf
tar xvzf tar xvzf

2.下载最新的CloudFlare QUICHE及其子项目,其实子项目就是BoringSSL

git clone --recursive https://github.com/cloudflare/quiche

3.运用QUCHE中的NGINX补丁包为NGINX打上补丁

cd nginx-1.16.1
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 -y
yum install rust cargo -y

5. NGINX编译设置

NGINX的configure设置必须包括以下设置:

--with-http_ssl_module  --with-http_v2_module  --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 'h3-23=":443"; ma=86400';
    }
}

7.检查HTTP3开启效果:

在CHROME浏览器开发工具中NETWORK中点击对应页面,查看Response headers出现 alt-svc: h3-23=”:443″; ma=86400,即为正确实现了NGINX HTTP3:QUIC.

8.第四放改进方案

如果CLOUDFLARE的quiche是第三方改造方案的话,我还发现了另一个大佬的第四方改造方案。

我在另一博主的改进的补丁集中发现了另外一个补丁,更新更快并且适配了新版本的NGINX1.17.4。使用方法类型直接下载补丁打到NGINX目录,同事需要手动下载quice,但是不再打quice中的补丁。其他安装一样。

9.主要相关项目地址:

https://github.com/google/boringssl https://github.com/cloudflare/quiche https://github.com/kn007/patch/blob/master/nginx_with_quic.patch

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [ 物联网篇 ] 12 - 联发科MTK8516 开发环境搭建

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    程序手艺人
  • Vue配置多模块

    修改wenpack.prod.conf.js(参考webpakc.dev.conf.js修改)

    苦咖啡
  • sass/scss 变量与嵌套规则

    头部定义的变量的作用域是变量以下所有区域, 在{ }内部定义的变量,内部有效,属于局部变量 sass变量不会变量提升,必须先定义后使用。

    祈澈菇凉
  • 关于makefile 快速掌握模板教程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    多凡
  • 方便的回归测试——diffy平台

    前段时间,公司运维又双叒叕在迁移机房,带来的又是大量的回归测试,虽然负责的项目case还算健全,但是被迁移机房仍然存在大量的历史接口,有些甚至不知道是什么业务在...

    用户5521279
  • boost编译

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    sofu456
  • sass/scss 入门

    祈澈菇凉
  • Wings-让单元测试智能全自动生成

    单元测试是保证软件质量非常有效的手段,无论是从测试理论早期介入测试的理念来看或是从单元测试不受UI影响可以高速批量验证的特性,所以业界所倡导的测试驱动开发,这个...

    小老鼠
  • 新版React Native发布APP之打包iOS应用

    用React Native开发好APP之后,如何将APP发布以供用户使用呢?一款APP的发布流程无外乎:签名打包—>发布到各store这两大步骤。本文将向大家分...

    CrazyCodeBoy
  • Mybatis系列第5篇:Mapper接口多种方式传参详解、原理、源码解析

    Mybatis系列目标:从入门开始开始掌握一个高级开发所需要的Mybatis技能。

    路人甲Java

扫码关注云+社区

领取腾讯云代金券