Nginx 1.25配置QUIC和HTTP3

Nginx 1.25配置QUIC和HTTP/3

Nginx在编译时需要配置相应的SSL库,以确保能够支持HTTP3.0和HTTP2.0等基于HTTPS的协议。这些加密算法主要由OpenSSL提供。另外,BoringSSL是谷歌创建的OpenSSL分支,专门用于支持TLS 1.3的UDP协议的0-RTT数据传输加密算法。BoringSSL的特点在于其与OpenSSL的高度兼容性和同步性,一些改进和特性会逐步融入到OpenSSL中。

Nginx从1.25版本开始正式支持QUIC和HTTP/3协议。特别是从1.25.0版本开始,Linux环境下的Nginx二进制包就已经内建了QUIC和HTTP/3的支持。然而,这些新支持的协议目前仍处于实验性阶段,因此可能需要用户自行配置和编译Nginx以实现使用。

官方提供了三种SSL库供用户选择,具体可参见Nginx官方文档中的相关内容 https://nginx.org/en/docs/quic.html 在选择SSL库时,如果用户希望充分利用QUIC和HTTP/3的特性,建议使用专门为这些协议设计的SSL库,如BoringSSL、LibreSSL或QuicTLS。如果不使用这些专用的SSL库,Nginx将退回到使用OpenSSL的兼容层,可能会在某些功能上有所限制或无法实现完全的支持。

我这里使用BoringSSL来演示。

编译安装BoringSSL

*注意编译安装 BoringSSL 需要使用 cmake3 以上的版本.

# 下载boringssl库
git clone --depth=1 https://github.com/google/boringssl.git
安装相关依赖
apt-get update
apt-get install -y build-essential cmake
add-apt-repository ppa:longsleep/golang-backports
apt-get update
apt-get install -y openssl golang-go libpcre3 libpcre3-dev libssl-dev zlib1g-dev
编译BoringSSL
cd boringssl && mkdir build && cd build && cmake .. && make && cd ../../

编译安装Nginx

截止到2024年1月,Nginx目前最新版本为1.25.3

下载Nginx源码包
wget https://nginx.org/download/nginx-1.25.3.tar.gz
tar xvf nginx-1.25.3.tar.gz
useradd nginx -s /sbin/nologin -M
编译安装nginx
./configure  --prefix=/usr/local/nginx \
    --with-debug \
    --with-http_v3_module \
    --with-http_v2_module \
    --with-cc-opt="-I../boringssl/include"    --with-ld-opt="-L../boringssl/build/ssl  -L../boringssl/build/crypto"

make && make install
检查Nginx模块

配置Nginx
# 配置文件中省略了部分默认内容。
user  nginx;
worker_processes  1;

events {
    worker_connections  65535;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $http3';
    
    server {
        listen       443 quic reuseport; 	# 启用 quic 协议
        listen       443 ssl; 				# 启用 http2 协议浏览器不支持 http3 时,可以选择 http2
        server_name  www.example.com;		

        ssl_protocols       TLSv1.3;  # QUIC requires TLS 1.3 #支持tls协议1.3
        ssl_certificate      /usr/local/nginx/ssl/www.example.com/cert.pem;
        ssl_certificate_key  /usr/local/nginx/ssl/www.example.com/cert.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        add_header Alt-Svc 'h3=":443"; ma=86400'; 
        # Alt-Svc 全称为 “Alternative-Service”,直译为“备选服务”。该头部列举了当前站点备选的访问方式列表,让服务器可以告诉客户端 “看,我在这个主机的这个端口用这个协议提供相同的服务”。一般用于在提供 “QUIC” 等新兴协议支持的同时,实现向下兼容
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
启动Nginx

验证 HTTP3 生效

由于目前浏览器对HTTP3.0/QUIC的支持性有限,可以使用 https://http3check.net/ 来验证站点启用HTTP3是否成功。

参考:

  • https://www.google.cn/chrome/canary/
  • https://cloudflare-quic.com/
  • https://hg.nginx.org/nginx-quic
  • https://github.com/google/boringssl
  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Alt-Svc
    😕/hg.nginx.org/nginx-quic
  • https://github.com/google/boringssl
  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Alt-Svc
  • https://http3check.net/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从C向C++6——运算符重载

本文的主要知识点是C中的运算符重载。 1.运算符重载 所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。**运算符重载(Operator Overloading&#…

【VS Code+Verilog+Vivado使用】(1)常用插件

文章目录 1 常用插件1.1 Chinese Language Pack1.2 Verilog-HDL/SV/BSV1.2.1 语法高亮1.2.2 代码片段1.2.3 代码检查1.2.4 Ctags1.2.4.1 自动补全设置1设置2 1.2.4.2 悬停显示1.2.4.3 转到定义1.2.4.4 查看定义1.2.4.5 模块例化设置1 1.3 vscode-icons1.4 Hex Editor1.5 Error …

Web开发8:前后端分离开发

在现代的 Web 开发中,前后端分离开发已经成为了一种常见的架构模式。它的优势在于前端和后端可以独立开发,互不干扰,同时也提供了更好的可扩展性和灵活性。本篇博客将介绍前后端分离开发的概念、优势以及如何实现。 什么是前后端分离开发&am…

国考省考行测:逻辑判断,分析推理,排除法,假设法

国考省考行测:逻辑判断,分析推理 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和…

【数据结构与算法】之哈希表系列-20240129

这里写目录标题 一、217. 存在重复元素二、219. 存在重复元素 II三、242. 有效的字母异位词四、268. 丢失的数字五、290. 单词规律六、349. 两个数组的交集七、350. 两个数组的交集 II 一、217. 存在重复元素 简单 给你一个整数数组 nums 。如果任一值在数组中出现至少两次 &a…

Java 面试题之 IO(二)

字符流 文章目录 字符流Reader(字符输入流)Writer(字符输出流) 文章来自Java Guide 用于学习如有侵权,立即删除 不管是文件读写还是网络发送接收,信息的最小存储单元都是字节。 那为什么 I/O 流操作要分为字…

【linux】-linux操作系统分支及包管理系统

一、Linux主要版本分支 免费的:ubuntu、centos,分属红帽、大便分支。 centos渐渐退出,CentOS 之父创造的 Rocky Linux(再见 CentOS! Rocky Linux 要来了) 二、Rocky Linux 官方地址:https://rockylinux.…

【大数据】Flink 架构(三):事件时间处理

《Flink 架构》系列(已完结),共包含以下 6 篇文章: Flink 架构(一):系统架构Flink 架构(二):数据传输Flink 架构(三):事件…

【Python笔记-设计模式】建造者模式

一、说明 又称生成器,是一种创建型设计模式,使其能够分步骤创建复杂对象。允许使用相同的创建代码生成不同类型和形式的对象。 (一) 解决问题 对象的创建问题:当一个对象的构建过程复杂,且部分构建过程相互独立时,可…

吉利汽车:S-SDLC融入开发体系,推动智能汽车安全发展

吉利汽车是中国汽车行业的知名品牌,是一家具有国际化视野的汽车企业,在中国汽车市场自主品牌中占据领军地位。吉利汽车集团数字化中心利用数字化技术优势赋能业务升级,推动研发效率提升和产品安全能力拓展,进行整体数字化转型。 在…

键盘上Ins键的作用

前几天编写文档时,发现一个问题:插入内容时,输入的字符将会覆盖光标位置后的字符。原来是按到了键盘上的 Ins键,解决方法是:再按一次 Ins键(Ins键如果独立作为一键时,否则使用 “Fn Ins”组合键…

C++ —— 智能指针

C —— 智能指针 文章目录 C —— 智能指针一、为什么需要使用智能指针?二、内存泄漏什么是内存泄漏?内存泄漏的危害?内存泄漏分类 三、智能指针的使用及原理1. RAII2. 智能指针的原理 三、智能指针的缺陷及其发展3.1 std::auto_ptr3.2 std::…

华为笔记本matebook pro X如何扩容 C 盘空间

一、前提条件 磁盘扩展与合并必须是相邻分区空间,且两个磁盘类型需要相同。以磁盘分区为 C 盘和 D 盘为例,如果您希望增加 C 盘容量,可以先将 D 盘合并到 C 盘,然后重新创建磁盘分区,分配 C 盘和 D 盘的空间大小。 访…

Element ui 的组件弹窗 el-dialog点击的时候全屏变灰问题解决

最近在使用Element UI 的弹窗组件的时候发现这个组件各种的应用都没有问题,数据和元素的应用都是正确的但是在点击显示这个弹窗的时候全屏幕都会变灰。 这也不是因为增加了modal 遮挡幕的问题,在经过不断的排查代码的时候基本排除了代码的问题&#xf…

利用外卖系统源码构建高效的在线订餐平台

在当今数字化时代,外卖服务已成为人们日常生活中不可或缺的一部分。为了满足用户需求,许多创业者和企业都希望搭建自己的在线订餐平台。利用现有的外卖系统源码,可以快速构建一个高效、安全的在线订餐平台。本文将介绍如何利用外卖系统源码来…

Qt SQLite3数据库加密 QtCipherSqlitePlugin

在客户端软件开发过程中,基本都会涉及到数据库的开发。QT支持的数据库也有好几种(QSQLITE, QODBC, QODBC3, QPSQL, QPSQL7),SQLite就是其中之一,但这个 SQLite 是官方提供的开源版本,没有加密功能的。如果对…

k8s 进阶实战笔记 | 应用的蓝绿、金丝雀发布笔记

文章目录 应用的蓝绿、金丝雀发布笔记应用升级策略停机升级滚动更新蓝绿发布金丝雀发布 应用的蓝绿、金丝雀发布笔记 应用升级策略 Deployment.spec.strategy 设置 Recreate:同时删除所有副本,停机升级策略 不存在新老版本共存 存在某个时间段服务不可…

麒麟系统—— openKylin 安装 redis

麒麟系统—— openKylin 安装 redis 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。 二、下载安装文件三、解压安装解压安装 四、配置与运行修改配置文件以配置文件运行 五、加入到服务中最终:介绍配置的其他参数使用 Redis是一种开源的、基于内存的高速缓存…

MySQL原理(一)架构组成(2)逻辑模块组成

总的来说,MySQL可以看成是二层架构,第一层我们通常叫做SQL Layer,在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql解析,执行计划优化,query cache的处理等等&…

Vue之初识Vue CLI 脚手架

Vue CLI 是Vue 官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 脚手架有什么好处? 1.开箱即用,零配置 2.内置 babel 等工具 3.标准化 使用步骤: 1.全局安装(一次):yarn globaladd vue/cli …