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

NGINX开启HTTP3,给web应用提个速

环境说明

  1. linux
  2. docker
  3. nginx版本:1.27

HTTP3/QUIC介绍

rfc9114
HTTP3是由IETF于2022年发布的一个标准,文档地址为:https://datatracker.ietf.org/doc/html/rfc9114

如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了可靠性的特点,在大多数场景下可提高web应用的访问速率。
quic/http3

关于http3和quic的介绍网上资料有很多,这里不再过多赘述。
nginx-news-2023
自nginx的1.25.0版本开始,nginx首次对http3进行了正式支持,这也为我们在WEB服务器上部署http3提供了极大的便利。
nginx-basic
本文以重实践角度出发,使用web服务器——NGINX,分享下如何在NGINX中开启HTTP3。

自签证书生成

nginx-http3-quic
http3必须依赖于TLS协议,所以需要要证书。本文为了演示方便,使用自签证书来进行操作。

自签证书仅用于验证或内网环境,生产环境需要使用公共证书,免费的有:certbot(Let’s Encrypt)

自签证书并部署到NGINX中,主要流程为:

  1. 生成CA证书,root_certificate
  2. 使用CA证书生成NGINX服务器所需要的网站证书,site_certificate
  3. 将site_certificate配置到nginx中

自签CA证书生成

#1.生成根证书私钥
openssl genpkey -algorithm RSA -out root_private_key.pem -pkeyopt rsa_keygen_bits:4096#2.使用私钥创建CSR(证书签名请求)
openssl req -new -key root_private_key.pem -out root_csr.pem -subj "/C=CN/ST=SiChuan/L=ChengDu/O=HaiyangGroup/CN=HaiyangRootCA"
#如上面命令报Can't load /root/.rnd into RNG,可使用openssl rand -writerand ~/.rnd修复#3.创建CA配置文件
vim v3_ca.cfg
---
[v3_ca]
basicConstraints = CA:TRUE
keyUsage = keyCertSign, cRLSign
---
#4.生成根证书,依赖CSR和CA配置文件
openssl x509 -req -days 3650 -in root_csr.pem -signkey root_private_key.pem -out root_certificate.pem -extensions v3_ca.cfg

站点https证书生成

#1.生成站点私钥
openssl genpkey -algorithm RSA -out site_private_key.pem -pkeyopt rsa_keygen_bits:2048
#2.生成站点CSR(证书签名请求),CN填写为对应的域名
openssl req -new -key site_private_key.pem -out site_csr.pem -subj "/C=CN/ST=SiChuan/L=BaZhong/O=HaiyangCompany/CN=www.puhaiyang.com"
#3.编写服务,alt_names部分修改为对应的域名和ip
vim site_openssl.cnf
---
[v3_req]
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.puhaiyang.com
DNS.2 = *.puhaiyang.com
IP.1 = 192.168.31.174
————————————————
#4.生成站点https证书,依赖CA证书、CA私钥、站点CSR
openssl x509 -req -in site_csr.pem -CA root_certificate.pem -CAkey root_private_key.pem -CAcreateserial -out site_certificate.pem -days 3650 -extensions v3_req -extfile site_openssl.cnf
---

生成的CA证书与站点证书文件列表如下:
site_ssl

验证根证书

#1.验证CA根证书
openssl x509 -in root_certificate.pem -text -noout
#2.验证站点证书
openssl x509 -in site_certificate.pem -text -noout

nginx-http3配置与运行

nginx基础配置

# 创建挂载目录
mkdir -p /data/docker/nginx/conf
mkdir -p /data/docker/nginx/log
mkdir -p /data/docker/nginx/html
mkdir -p /data/docker/nginx/certs
# 生成临时容器,
docker run --name nginx -d nginx
# 验证nginx是否开启了http3,查看有http_v3
docker exec -it nginx nginx -V
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /data/docker/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /data/docker/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /data/docker/nginx/
# 关闭该临时容器
docker stop nginx
# 删除该临时容器
docker rm nginx

验证nginx时截图如下,需要确保nginx编译参数中开启了http3

docker exec -it nginx nginx -V
http3_nginx

nginx运行与站点配置

将生成的站点证书放到/data/nginx/certs目录下

cp site_private_key.pem /data/docker/nginx/certs/
cp site_certificate.pem /data/docker/nginx/certs/
#赋权限,确保有读取权限
chmod +r /data/docker/nginx/certs/*

创建nginx的站点配置

vi /data/docker/nginx/conf/conf.d/www.puhaiyang.com.conf
---
server {# http/3listen 443 quic reuseport;# http/2 and http/1.1listen 443 ssl;http2 on;server_name www.puhaiyang.com;  # customize to match your domain# you need to mount these files when running this containerssl_certificate     /usr/share/nginx/certs/site_certificate.pem;ssl_certificate_key /usr/share/nginx/certs/site_private_key.pem;# TLSv1.3 is required for QUIC.ssl_protocols TLSv1.2 TLSv1.3;# 0-RTT QUIC connection resumptionssl_early_data on;# Add Alt-Svc header to negotiate HTTP/3.add_header alt-svc 'h3=":443"; ma=86400';# Sent when QUIC was usedadd_header QUIC-Status $http3;location / {root   /usr/share/nginx/html;index  index.html index.htm;}
}

更多详细配置可参考:https://nginx.org/en/docs/http/ngx_http_v3_module.html

运行nginx-docker

因为http3基于QUIC协议,QUIC又基于UDP协议,在运行nginx的docker时记得将https的UDP端口也暴露到主机中。

docker run \
-p 80:80 -p 443:443 -p 443:443/udp \
--name nginx \
-v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/docker/nginx/log:/var/log/nginx \
-v /data/docker/nginx/html:/usr/share/nginx/html \
-v /data/docker/nginx/certs:/usr/share/nginx/certs \
-e TZ=Asia/Shanghai \
--restart=always \
-d nginx:latest

验证时可使用netstat查看udp端口是否正确被暴露,示例截图:
netstat

输入nginx -v命令查看使用的nginx版本是否为较高版本的nginx

docker exec -it nginx nginx -v
nginx-v

浏览器验证

nginx搭建好后,就可以使用浏览器进行验证了。

浏览器支持QUIC验证

验证前,需要确保浏览器(客户端)支持http3.0,可访问https://quic.nginx.org/进行验证。
quic-test

如提示支持quic,或quic包验证也通过,则说明客户端是支持http3的
browser

如不支持,可使用https://quic.nginx.org/提供的排查项进行逐步排查。

导入自签CA根证书到客户主机(可选)

如果是站点的tls证书是由自签ca证书生成的,为了让浏览器访问网站更优雅,可让先CA根证书导入到客户端系统中。
以本例为例,则需要导入的证书文件为:root_certificate.pem
在windows中打开certmgr.msc,将证书导入到受信任的根证书颁发机构即可
certmgr

访问自定义的http3站点

在浏览器中通过ip或域名访问搭建的站点。如本例中的:https://www.puhaiyang.com
(自定义虚拟域名需修改hosts文件)
browser-nginx-check
打开浏览器的检查功能,查看http请求协议是否为http/3。

还可以通过wireshark抓包进行验证
wireshark-quic
抓包协议栏显示为QUIC,则证明nginx配置http3成功啦~


下篇文章将使用实例,结合理论与实践,对比分析下http1.1、http2、http3在实际场景下的性能差别。

相关文章:

NGINX开启HTTP3,给web应用提个速

环境说明 linuxdockernginx版本:1.27 HTTP3/QUIC介绍 HTTP3是由IETF于2022年发布的一个标准,文档地址为:https://datatracker.ietf.org/doc/html/rfc9114 如rfc9114所述,http3主要基于QUIC协议实现,在具备高性能的同时又兼备了…...

秋招季!别浮躁!

好久没写了,今天兴致来了,众所周知我一旦想说话,就来这里疯狂写。 最近,我去了一家国企的研究院,听着是不是贼高大上,呵——这玩意儿把我分配到三级机构,我一个学计算机的,它不把我…...

Java的时间复杂度和空间复杂度和常见排序

目录 一丶时间复杂度 二丶空间复杂度 三丶Java常见排序 1. 冒泡排序(Bubble Sort) 2.插入排序(Insertion Sort) 3.希尔排序(Shell Sort) 4.选择排序(Selection Sort) 5.堆排序&am…...

Qt 学习第十天:标准对话框 页面布局

系统标准对话框 错误对话框 //错误对话框connect(createPro, &QAction::triggered, this, []{//参数1 父亲 参数2 标题 参数3 对话框内显示文本内容 。。。QMessageBox::critical(this, "报错!", "没加头文件!");}); 【运行结果】 信息对话框 co…...

体育数据API纳米足球数据API:足球数据接口文档API示例⑩

纳米体育数据的数据接口通过JSON拉流方式获取200多个国家的体育赛事实时数据或历史数据的编程接口,无请求次数限制,可按需购买,接口稳定高效; 覆盖项目包括足球、篮球、网球、电子竞技、奥运等专题、数据内容。纳米数据API2.0版本…...

[数据集][目标检测]高铁受电弓检测数据集VOC+YOLO格式1245张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1245 标注数量(xml文件个数):1245 标注数量(txt文件个数):1245 标注…...

Vuex:深入理解所涉及的几个问题

你好,我是沐爸,欢迎点赞、收藏、评论和关注。 一、Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 二、Vu…...

vue原理分析(六)研究new Vue()

今天我们来分析使用new Vue() 之前研究时,只是说是在创建一个实例。并没有深入进行研究 在vue的源码中找下Vue的构造函数 function Vue(options) {if (!(this instanceof Vue)) {warn$2(Vue is a constructor and should be called with the new keyword);}this.…...

滑动窗口+动态规划

前言:分析这个题目的时候,就知道要这两个线段要分开,但是要保证得到最优解,那么我们在选取第二根线段的时候,要保证我们第一根线段是左边最优解 并且我们选的两根线段的右端点一定是我们的数组的点(贪心思…...

vscode配置django环境并创建django项目

1、创建文件夹 创建文件夹 并在vscode打开 终端输入命令 “ python -m venv env ” 查看目录结构 2、创建项目 在终端输入 django-admin startproject 文件名(这里以myshop为例) 3、创建应用 在myshop打开终端 在终端输入 django-admin startapp 应用名 这里以app1为例…...

WebGL系列教程四(绘制彩色三角形)

目录 1 前言2 varying变量介绍3 开始绘制3.1 声明顶点着色器3.2 声明片元着色器3.3 创建顶点和颜色的缓冲区3.4 指定变量从缓冲区获取值3.5 效果3.6 varying的内涵3.7 完整代码 4 总结 1 前言 上一篇中我们介绍了如何使用缓冲区来绘制三角形,这一篇我们来讲讲如何给…...

通过mxGraph在ARMxy边缘计算网关上实现工业物联网

在当今的工业4.0时代,工业物联网(IIoT)已经成为制造业转型升级的关键技术之一。ARMxy边缘计算网关作为工业自动化和物联网的重要组成部分,能够为工厂车间提供实时的数据处理能力和智能化服务。而mxGraph作为一种流行的JavaScript库…...

GEE案例:利用sentinel-1数据进行洪水监测分析(直方图统计)

目录 简介 数据 函数 ee.Filter.calendarRange(start, end, field) Arguments: Returns: Filter updateMask(mask) Arguments: Returns: Image 代码 结果 简介 利用sentinel-1数据进行洪水监测分析 数据 COPERNICUS/S1_GRD数据是由欧洲空间局(ESA)的Copernicus项…...

QT 联合opencv 易错点

https://blog.csdn.net/qq_51699436/article/details/135777911 网上已经有大量优秀切详尽的文章来讲述QT联合opencv了,我把容易出错的点列出来备忘 1、在进行opencv进行编译时,要确认好是32位还是64位,因为在创建QT项目的时候QT和opencv要匹…...

例如/举例的使用方法 ,e.g., 以及etc的使用方法

e.g. 例如 for example for the sake of example such as 1 e.g. 是拉丁语 exempli gratia 的缩写意思是“举个例子,比如”,等同于for example、 for the sake of example、such as,使用 e.g. 的目的是用几个例子来说明前面的观点。 2 例…...

20240902-VSCode-1.19.1-部署vcpkg-win10-22h2

20240902-VSCode-1.19.1-部署vcpkg-win10-22h2 软件环境 标签:C++ VSCode mingw gcc13 vcpkg cmake分栏:C++操作系统:Windows10 x64 22h2一、安装VScode-1.19.1 请参考另一篇文章《20240717-VSCode-1.91.1-部署gcc13-C++23-win10-22h2》。 二、安装cmake 本文流程需要安…...

MySQL学习(多表操作)

基本知识 一对多 创建部门表 – 主表 create table if not exists dept(deptno varchar(20) primary key ,name varchar(20) );创建员工表 – 创建外键约束 方式1constraint emp_fk foreign key(dept_id) references dept(deptno) create table if not exists emp(eid varc…...

鸿蒙开发(NEXT/API 12)【网络连接管理】 网络篇

简介 网络连接管理提供管理网络一些基础能力,包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。 说明 为了保证应用的运行效率,大部分API调用都是异步的,对…...

VMware Fusion虚拟机Mac版 安装Ubuntu操作系统教程

Mac分享吧 文章目录 下载镜像地址:[www.macfxb.cn](http://www.macfxb.cn)一、CentOS安装完成,软件打开效果二、Mac中安装Ubuntu虚拟机1️⃣:下载镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:虚拟机安装5️…...

基于SpringBoot+Vue+MySQL的房屋租赁管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿沟,信息的…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...