当前位置: 首页 > news >正文

Nginx支持quic协议

第一种方式: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 boringsslmkdir buildcd buildcmake ..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 gofmtcd /usr/local/go/bincp 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文件配置同上
浏览器访问,查看协议类型
在这里插入图片描述

相关文章:

Nginx支持quic协议

第一种方式&#xff1a;Nginx官方nginx-quic搭建 通过部署Nginx官方的QUIC分支来实现的浏览器和nginx-quic服务器粗略的HTTP3通信。 1、下载BoringSSL BoringSSL 是由谷歌开发,从 OpenSSL 中分离的一个分支。BoringSSL 是 Chrome/Chromium、Android&#xff08;但它不是 NDK 的…...

笔记 - Java 内存结构与模型

-- Java里内存结构与内存模型是两种概念 一、Java内存结构&#xff1a; HeapMemory - 堆内存Java Stacks - 栈内存 &#xff08;运行时&#xff09;Method Area - 方法区Native Method Stack - 本地方法栈 真实和系统打交道的地方Jit Compiler - 将java运行指令编译成机器指令G…...

C#基础教程12 数组

文章目录 C# 数组(Array)C# 中的数组声明数组初始化数组赋值给数组访问数组元素C# 数组细节C# 数组(Array) 数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。 声明数组变量并不是声明 number0、number1…...

Android中级——屏幕和绘图

屏幕和绘图屏幕系统屏幕密度独立像素密度dp单位转换XML绘图&#xff08;需放在Drawable&#xff09;BitmapShapeLayerSelector绘图技巧CanvasLayerPorterDuffXfermodeShaderPathEffectSurfaceView屏幕 屏幕大小&#xff1a;指屏幕对角线长度&#xff0c;单位为寸分辨率&#x…...

Linux - 第6节 - 动态库和静态库

1.静态库与动态库概念 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码拷贝到可执行文件中。程序运行的时候将不再需要静态库。动态库&#xff08;.so&#xff09;&#xff1a;程序在运行的时候才去链接动态库的代码&#xff0c;多个程序共享使用…...

【Java学习笔记】12.Character 类及String 类

前言 本章介绍Java的Character 类和String 类。 Java Character 类 Character 类用于对单个字符进行操作。 Character 类在对象中包装一个基本类型 char 的值 实例 char ch a;// Unicode 字符表示形式 char uniChar \u039A; // 字符数组 char[] charArray { a, b, c, d…...

【C++修炼之路】26.C++11(语法糖)

每一个不曾起舞的日子都是对生命的辜负 C11C11(语法糖)本节目标一.C11简介二.统一的列表初始化2.1 {}初始化2.2 std::initializer_list三.声明3.1 auto3.2 decltype3.3 nullptr四.总结C11(语法糖) 本节目标 C11简介 列表初始化 变量类型推导 一.C11简介 在2003年C标准委员…...

KD610精密油介损体积电阻率测试仪

一、概述 KD610精密油介损体积电阻率测试仪是用于绝缘油等液体绝缘介质的介质损耗角及体积电阻率的高精密仪器。 二、产品特点 1&#xff0e;仪器内部采用数字技术&#xff0c;具备多种模式测式。 2&#xff0e;智能自动化测量。 3&#xff0e;配备了大屏幕&#xff08;2401…...

快速了解原码、反码、补码和位运算

我们知道计算机使用的是二进制&#xff0c;我们⽤⼀个字节&#xff0c;也就是8个bit 来表示⼆进制数。 原码 十进制 原码20000 0010-21000 0010 原码其实是最容易理解的&#xff0c;只不过需要利⽤⼆进制中的第⼀位来表示符号位&#xff0c;0表示正数&#xff0c;1表示…...

算法的复杂度介绍

算法的复杂度介绍 算法&#xff08;Algorithm&#xff09;是指用来操作数据、解决程序问题的一组方法。对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别。 为什么要进行算法分析&…...

教你如何搭建店铺—收支管理系统,demo可分享

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建店铺-收支管理。1.2、应用场景以店铺收支管理为核心&#xff0c;维度数据分析&#xff0c;智能指导门店经营&#xff0c;账目清晰一目了然&#xff0c;店铺经营更高效。2、设置方法2.1、表单搭建1&#xff09;新建表单【客户…...

java性能分析-堆内存最佳实践-堆分析

堆内存最佳实践 优化垃圾回收器标志参数很重要但是采用更好的编程实践获得更大的性能提升 1.谨慎的创建对象并尽快的丢弃&#xff0c;是更好的内存是提高gc更好的方法 2.频繁创建某种类型的对象会导致整体的性能变差 对象复用设计 线程局部变量 每个线程中创建一个局部变量…...

3月8号作业

题目&#xff1a;题目一&#xff1a;vmlinux可执行文件如何产生题目二&#xff1a;整理内核编译流程&#xff1a;uImage&#xff0c;zImage,Image,vmlinux之间的关系答案一&#xff1a;在内核源码目录下vi Makefile&#xff0c;搜索vmlinux目标&#xff0c;vmlinux: scripts/li…...

Flink相关介绍

简介 Flink的定位是&#xff1a;Apache Flink是一个框架和分布式处理引擎&#xff0c;如图所示&#xff0c;用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境运行&#xff0c;以内存执行速度和任意规模来执行计算。 Flink 框架处理流程应用场景 1、电…...

Java 8 排序

今天分享 Java 8 进行排序的 10 个姿势&#xff0c;其实就是把 Java 8 中的 Lambda、Stream、方法引用等知识点串起来 传统排序 现在有一个 List 集合&#xff1a; public static List<User> LIST new ArrayList() {{add(new User("Lisa", 23));add(new Us…...

Blazor_WASM之4:路由

Blazor_WASM之4&#xff1a;路由 路由模板 通过 Router组件可在 Blazor 应用中路由到 Razor 组件。 Router 组件在 Blazor 应用的 App 组件中使用。App组件模板如下 <Router AppAssembly"typeof(Program).Assembly"><Found Context"routeData"…...

对Vue响应式的理解

1. 啥是响应式? &#xff08;1&#xff09;.所谓的数据响应式就是能够使数据变化可以被检测到并且对这种变化做出响应式的机制 2. 为什么vue需要响应式? &#xff08;1&#xff09;.MVVM框架中要解决的核心问题数据驱动视图&#xff0c;数据的改变引起视图的更新&#xff…...

磁盘阵列Raid探讨

最近公司买服务器&#xff0c;顺便了解一下服务器配置方面的问题 以下讨论的都是入门级服务器配置&#xff0c;全部是主观意见&#xff0c;没有任何科学依据&#xff0c;欢迎大家讨论 Raid0&#xff0c;Raid1&#xff0c;Raid10&#xff0c;Raid5&#xff0c;Raid6(Raid5热备)…...

基于MyBatis依次、批量、分页增删改查

我们知道处理数据有三种思路&#xff1a;依次、批量、分页&#xff0c;对应方法如下 依次处理&#xff1a;在 Java 里面写 for 循环&#xff0c;依次使用 SQL 语句&#xff0c;频繁连接断开数据库批量处理&#xff1a;在 MyBatis 里面用 <foreach> 拼接成一条长 SQL 语句…...

Tomcat源码分析-Session源码解析

tomcat session 设计分析 tomcat session 组件图如下所示&#xff0c;其中 Context 对应一个 webapp 应用&#xff0c;每个 webapp 有多个 HttpSessionListener&#xff0c; 并且每个应用的 session 是独立管理的&#xff0c;而 session 的创建、销毁由 Manager 组件完成&…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...