Nginx支持quic协议

news2025/1/24 22:47:38

第一种方式:Nginx官方nginx-quic搭建

通过部署Nginx官方的QUIC分支来实现的浏览器和nginx-quic服务器粗略的HTTP3通信。
1、下载BoringSSL
BoringSSL 是由谷歌开发,从 OpenSSL 中分离的一个分支。BoringSSL 是 Chrome/Chromium、Android(但它不是 NDK 的一部分)和许多其他应用程序/程序中的 SSL 库。

由于nginx quic版本使用了新的tls1.3协议,需要openssl支持quic,但目前的openssl版本没有对应的支持,所以这里使用google的boringssl。

## 下载代码
git clone https://github.com/google/boringssl.git 
## 编译代码
 cd boringssl
 mkdir build
 cd build
 cmake ..
 make

2,Cmake命令下载安装,要求安装3.0以上版本

wget https://cmake.org/files/v3.24/cmake-3.24.3.tar.gz
tar zxvf cmake-3.24.3.tar.gz
cd cmake-3.24.3
./bootstrap --prefix=/usr/local/
make && make install

3,安装BoringSSL 要求go版本为1.19

1,删除旧版本go环境
rm -rf /usr/local/go
2,wget https://golang.google.cn/dl/go1.19.linux-amd64.tar.gz
3,tar -C /usr/local/ -zxvf go1.1.19.linux-amd64.tar.gz (官方推荐解压到/usr/local/目录下)
4,配置环境变量 vi /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin 
使修改文件生效 source /etc/profile
5,查看版本 go version
6,如果不生效
   cd /usr/bin/
   rm go gofmt
   cd /usr/local/go/bin
   cp go* /usr/bin/

在这里插入图片描述
4,安装更高版本的gcc
gcc 4.8 的漏洞,在gcc 4.9已经修复,之前使用11.1.0不成,不知道是不是自己的原因,后改换gcc 8.1.0
gcc官网 https://gcc.gnu.org/
下载地址: http://ftp.gnu.org/gnu/gcc/
在这里插入图片描述

1,解压
tar -zxvf gcc-8.1.0.tar.gz
2,查看安装前依赖的软件包
cd gcc-8.1.0/
vim contrib/download_prerequisites

在这里插入图片描述
3,下载对应依赖包
可以直接执行yum groupinstall “Development Tools” 下载,然后安装
也可以分别下载安装,选择需要的版本
https://ftp.gnu.org/gnu/gmp/
https://ftp.gnu.org/gnu/mpfr/
https://ftp.gnu.org/gnu/mpc/
https://gcc.gnu.org/pub/gcc/infrastructure/
4,安装顺序:GMP,mpfr, mpc,isl 。最后安装gcc
5,原来旧版本的gcc不能先卸载,否则安装过程报错
6,安装gmp

    $ tar -jxvf gmp-6.1.0.tar.bz2
    $ cd gmp-6.1.0
    $ mkdir temp
    $ cd temp
    $ ../configure --prefix=/usr/local/gmp-6.1.0         -----指定安装目录
    $ make
    $ make install

7,安装mpfr

    $ tar -zxvf mpfr-3.1.4.tar.gz 
    $ cd mpfr-3.1.4
    $ mkdir temp
    $ cd temp
    $ ../configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0
    $ make
    $ make install
     其中--with=/usr/local/gmp-6.1.0就是依赖项, /usr/local/gmp-6.1.0是gmp的安装目录

8,安装mpc

    $ tar -zxvf mpc-1.0.3.tar.gz
    $ cd mpc-1.0.3
    $ mkdir temp
    $ cd temp
    $ ../configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4
    $ make
    $ make install
    记得后面两项的依赖项,也就是你的gmp和mpfr的安装目录

9,安装isl(isl只依赖gmp)

    $ tar -zxvf isl-0.18.tar.bz2
    $ cd isl-0.18
    $ mkdir temp
    $ cd temp
    ../configure --prefix=/usr/local/isl-0.18 --with-gmp=/usr/local/gmp-6.1.0
    $ make
    $ make install

安装isl报错,安装yum install gmp-devel.x86_64,执行成功
在这里插入图片描述
10,安装gcc

$ cd ..
$ tar -zxvf gcc-8.1.0.tar.gz
$ cd gcc-8.1.0
$ ./configure --prefix=/usr/local/gcc-8.1.0 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local
$ make && make install && echo "say ok"
编译安装过程一个多小时
卸载旧版本编译器
$ yum remove gcc gcc-c++
$ ln -s /usr/local/gcc-8.1.0/bin/c++ /usr/bin/c++
$ ln -s /usr/local/gcc-8.1.0/bin/g++ /usr/bin/g++
$ ln -s /usr/local/gcc-8.1.0/bin/gcc /usr/bin/gcc
添加环境变量,修改profile文件,在最末添加如下两句
$ vim /etc/profile
LD_LIBRARY_PATH=/usr/local/gcc-8.1.0/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
$ source /etc/profile
cp /usr/local/gcc-11.1.0/lib64/libstdc++.so.6 /usr/lib64/

在这里插入图片描述
11,编译其他软件时报错:checking for C compiler … not found
解决: ./auto/configure --with-cc=/usr/bin/gcc
12,如果依然有错误找不到gcc
在/root/.bashrc中添加gcc的路径:
vim /root/.bashrc
同样把export PATH=$PATH:/usr/local/arm/4.3.2/bin添加到文件中
立即更新有效:source /root/.bashrc
5,下载Nginx的QUIC版

官网下载:http://hg.nginx.org/nginx-quic
cd nginx-quic
./auto/configure --with-debug --with-http_v3_module \
      --with-cc-opt="-I/root/tengine/boringssl/include" \
      --with-ld-opt="-L/root/tengine/boringssl/build/ssl \
      -L/root/tengine/boringssl/build/crypto"
 make && make install

在这里插入图片描述
6,对编译好的nginx进行配置启动

server {
     listen 8443 quic reuseport;
     listen 8443 ssl;

     ssl_protocols      TLSv1.2 TLSv1.3;
     ssl_certificate      /usr/local/nginx123/ca.1way/server.crt;
     ssl_certificate_key  /usr/local/nginx123/ca.1way/server.key;


    location / {
        proxy_pass        http://serverpool;
        add_header Alt-Svc 'h3=":8443"; ma=86400';
     }
   }
   upstream serverpool {
      server 192.168.159.144:8080;
   }

7,访问服务器
使用火狐浏览器进行访问,首先在火狐地址栏输入:about:config
然后查找network.http.http3.enabled,把false改为true,重启浏览器
在这里插入图片描述
在这里插入图片描述

第二种方法,使用cloudflare的quiche

参考链接:
https://blog.cloudflare.com/experiment-with-http-3-using-nginx-and-quiche/
https://kbsml.com/?p=67

 % curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
 % tar xvzf nginx-1.16.1.tar.gz
 % git clone --recursive https://github.com/cloudflare/quiche
 % cd nginx-1.16.1
 % patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
 % ./configure                          	\
   	--prefix=$PWD                       	\
   	--with-http_ssl_module              	\
   	--with-http_v2_module               	\
   	--with-http_v3_module               	\
   	--with-openssl=../quiche/deps/boringssl \
   	--with-quiche=../quiche
 % make && make install

nginx文件配置同上
浏览器访问,查看协议类型
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark Yarn 运行环境搭建

文章目录Spark Yarn 运行环境搭建1、解压缩文件2、修改配置环境文件3、配置历史服务器Spark Yarn 运行环境搭建 1、解压缩文件 将spark3.2.3的压缩包上传到 linux /opt/software 目录下 输入命令&#xff1a; tar -zxvf spark-3.2.3-bin-hadoop3.2-scala2.13.tgz -C /opt/ 解…

究竟是谁负了谁,来自底层测试的2022年终总结

前言 说实话坐在椅子前&#xff0c;都想好了&#xff0c;该怎么去写&#xff0c;甚至感觉有好多要写的&#xff0c;但是当我坐在椅子上时&#xff0c;却不知道该怎么开头了&#xff0c;不知道是不是紧张&#xff1f;还是不舍&#xff1f;难道还没有跟过去挥手告别的勇气吗&…

lambda函数

Lambda(函数指针)lambda 是c11非常重要也是最常用的特性之一&#xff0c;他有以下优点&#xff1a;可以就地匿名定义目标函数或函数对象&#xff0c;不需要额外写一个函数lambda表达式是一个匿名的内联函数lambda表达式定义了一个匿名函数&#xff0c;语法如下&#xff1a;[cap…

Vue3手写分页在分页的基础上用到Pagination 分页组件

近期有个项目要用到分页组件&#xff0c;但是内容不是表格&#xff0c;所以自己就研究了一下在Pagination 分页组件的基础上手写了分页 效果图&#xff1a; 目录 一、先声明几个变量用来定义第几页&#xff0c;每页多少条&#xff0c;总页数。 二、然后封装一个函数方便以后…

学习 Python 之 Pygame 开发魂斗罗(十)

学习 Python 之 Pygame 开发魂斗罗&#xff08;十&#xff09;继续编写魂斗罗1. 解决敌人不开火的问题2. 创建爆炸效果类3. 为敌人跳入河中增加爆炸效果4. 玩家击中敌人继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗&#xff08;九&#xff09;中&#xff0c;…

pycharm 使用方式

提示&#xff1a; pycharm 是专业版&#xff1b; 社区版目前暂不支持调试 Jupyter; 如果你是学生&#xff0c; 在读期间&#xff0c;每一年可以申请免费一年使用专业版&#xff0c; 详情到Jetbrain 去申请&#xff1b; 在申请过程中&#xff0c;需要注意&#xff0c; 不要使用…

简单给WordPress怎么添加自定义字段面板

今天一淘模板(56admin.com)WordPress怎么添加自定义字段面板&#xff1f;下面本篇文章给大家介绍一下WordPress添加自定义字段面板的方法&#xff0c;希望对大家有所帮助&#xff01; 我们在WordPress中编写文章的时候&#xff0c;经常会用到一些自定义字段&#xff0c;如网页描…

Vue3笔记01 创建项目,Composition API,新组件,其他

Vue3 创建Vue3项目 vue-cli //查看vue/cli版本&#xff0c;确保在4.5.0以上 vue --version //安装或升级vue/cli npm install -g vue/cli //创建项目 vue create new_project //启动 cd new_project npm run serve 也可以通过vue ui进入图形化界面进行创建 vite 新一代前端…

论文笔记:Positive-incentive Noise

2022 TNNLS 中心思想是&#xff1a;噪声并不一定是有害的 1 CV问题中的噪声 以图像分类为例 对图像加入适量的噪声后再训练&#xff0c;识别准确率反而上升了 再以目标检测为例&#xff1a; 从遥感影像中做飞机检测&#xff0c;一般都是把飞机紧紧框住&#xff0c;然后做…

第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解

文章目录 一、填空题 1、1 找最小全字母十六进制数 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 给列命名 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 日期相等 1、3、1 题目描述 1、3、2 题解关键思路与解答 1、4 乘积方案数 1、4、1 题目描述 1、4、2 题解关…

js typeof instanceof 以及数据类型

js 的数据类型 JavaScript的数据类型分为两种&#xff1a;原始类型&#xff08;即基本数据类型&#xff09;和对象类型&#xff08;即引用数据类型&#xff09;&#xff1a;基本类型&#xff1a;String、Number、Boolean、Null、Undefined、Symbol(es6)引用类型&#xff1a;Ob…

【冲刺蓝桥杯的最后30天】day5

大家好&#x1f603;&#xff0c;我是想要慢慢变得优秀的向阳&#x1f31e;同学&#x1f468;‍&#x1f4bb;&#xff0c;断更了整整一年&#xff0c;又开始恢复CSDN更新&#xff0c;从今天开始更新备战蓝桥30天系列&#xff0c;一共30天&#xff0c;如果对你有帮助或者正在备…

工作日志day04

再次安装虚拟机时常见的不确定点 软件选择 安装位置 点击完成 设置用户名的时候可能与数字&#xff0c;以及强度有关 注销以管理员身份登录填写root用户名和自己设的密码 网络设置之后可以ping通 sudo yum -y install tree python -V查看版本信息 之后是配置python3.6 http…

【C++】内联函数auto范围for循环nullptr

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、内联函数1.1 内联函数概念1.2…

华为OD机试题,用 Java 解【数字加减游戏】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

计及需求响应的改进灰狼优化算法求解风、光、柴、储容量优化配置(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

76 Python写入csv文件时出现空行_newline参数解决

76 Python写入csv文件时出现空行_newline参数解决 文章目录76 Python写入csv文件时出现空行_newline参数解决1. 准备工作2. with open 语句没有newline参数3. with open 语句有newline参数4. 总结1. 准备工作 在电脑D盘新建一个【76】文件夹。 用VScode编辑器打开【76】文件夹…

第1章 多线程基础

第1章 多线程基础 1.1.2 线程与进程的关系 进程可以看成是线程的容器&#xff0c;而线程又可以看成是进程中的执行路径。 1.2 多线程启动 线程有两种启动方式&#xff1a;实现Runnable接口&#xff1b;继承Thread类并重写run()方法。 执行进程中的任务时才会产生线程&a…

用Python写一个zidong发送直播弹幕脚本,让你在直播间霸屏

前言 现在直播这个东西可以说是哪哪都有&#xff0c;有些的直播还有看弹幕来进行抽奖活动&#xff0c;这不我表弟昨天晚上就碰上一个了 说是主播随机抽取一个弹幕抽奖&#xff0c;我表弟辛辛苦苦手动发送了一晚上的弹幕&#xff0c;结果啥也没中&#xff0c;怪可怜的 今天闲…

65 - 进程互斥锁的优化实现

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 问题一1.1 当前实现的深入分析1.2 解决方案设计1.3 解决方案实现步骤1.4 编程实验&#xff1a;EnterCritical()重设计2. 问题二2.1 互斥锁的优化设计2.2 互斥锁的优化实现方案2.3 编程实验&#xff1a;互斥锁的优化实现3. 小结1.…