宝塔面板启用 QUIC 与 Brotli 的完整教程
环境
系统:Ubuntu 22.04.4 LTS x86_64
宝塔版本:7.7.0 (可使用本博客提供的一键安装优化脚本)
nginx版本:1.26.1
开放UDP端口
注意:在你的服务器商家那里也要开放443 udp
端口
sudo ufw allow 443/udp
然后重新加载 UFW 以使新规则生效:
sudo ufw reload
安装 ngx_brotli模块
cd /www/server
git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli
添加 ngx_brotli 编译参数
echo "--add-module=/www/server/ngx_brotli" > /www/server/panel/install/nginx_configure.pl
到这一步其实可以编译nginx了,但是为了更好的性能释放,先升级OpenSSL后再编译
升级OpenSSL 版本
宝塔中编译安装的 Nginx 使用的是 OpenSSL 1.1.1(版本老旧),可以使用命令查看
nginx -V
开始升级
cd /www/server
git clone https://github.com/openssl/openssl.git
修改宝塔面板的 Nginx 安装脚本
cd /www/server/panel/install
wget -O zzbnginx.sh https://raw.githubusercontent.com/woniu336/open_shell/main/zzbnginx.sh
编译安装 Nginx,如果以前已安装过 Nginx 则先卸载
sh zzbnginx.sh install 1.26
等待编译完成
注意后面的小版本号不要输入,当前输入 1.26 即等于 1.26.1 版。
安装完成后,使用 nginx -V
查看编译详情:
如服务器的性能较强,CPU 与内存足够,还可以在 http 块(即宝塔面板>Nginx>设置>配置修改)中添加以下指令:
http3_max_concurrent_streams 256;
http3_stream_buffer_size 128k;
http3_max_concurrent_streams
这个指令是用来限制在单个 HTTP/3 连接上可以同时处理的最大流数量。默认值 128
意味着一个单一的 HTTP/3 连接可以同时承载最多 128 个双向数据流。
http3_stream_buffer_size
指令用于设置 HTTP/3 流的缓冲区大小。这个缓冲区用于存储待发送或已接收但尚未处理的数据。其默认值为 64k,增加缓冲区大小可以减少 I/O 操作的频率,可能对性能有所提升,特别是在处理大块数据传输时。
不过需要注意的是:这两个参数的值越大,占用的内存较多。
启用 Brotli压缩
nginx编译完成后,打开nginx配置,在gzip_disable的下方添加以下代码
brotli on;brotli_comp_level 6; brotli_buffers 16 8k; brotli_min_length 20; brotli_types *;brotli_static always; brotli_window 512k;
保存并重启 Nginx 。
当你重启nginx可能会报错的原因:
从 Nginx 1.25.1 开始,不再支持在 listen
中使用 http2
参数,需要单独一行 http2 on
;
所以,在站点配置中或其他站点,把http2去掉,单独一行,文末有说明
启用 QUIC/HTTP3
前提,你已经配置了证书
打开你的站点,完整的配置在文末,把域名改成你的即可:
注意事项:
- listen 443 quic reuseport; ## reuseport 只能在一个站点使用,其他站点请去掉reuseport
- listen 443 quic; ## 例如,其他站点没有reuseport参数
- include enable-php-81.conf; ## 这里的php是8.1版本,请修改成你使用的版本
- access_log和error_log 后面也要改成你的域名
- root /www/wwwroot/baidu.org; 这里改成你的站点目录
- server_name baidu.org www.baidu.org; 改成你的域名
当你重启nginx会报错的原因:
从 Nginx 1.25.1 开始,不再支持在 listen
中使用 http2
参数,需要单独一行 http2 on
;
所以,在站点配置中或其他站点,把http2去掉,单独一行,如图
完整站点配置
server
{listen 80;listen 443 ssl;listen 443 quic reuseport;http2 on;http3 on;http3_hq on;quic_retry on;server_name baidu.org www.baidu.org;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/baidu.org;# SSL 配置ssl_certificate /www/server/panel/vhost/cert/baidu.org/fullchain.pem;ssl_certificate_key /www/server/panel/vhost/cert/baidu.org/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_early_data on;ssl_stapling on;ssl_stapling_verify on;# HTTP重定向至HTTPSif ($server_port !~ 443){rewrite ^(/.*)$ https://$host$1 permanent;}# Proxy headersproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_buffering off;proxy_http_version 1.1;proxy_read_timeout 600s;# HTTP/3 headersadd_header Alt-Svc 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"';add_header quic-status $http3 always;add_header x-quic 'h3' always;add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";# Error pageserror_page 497 https://$host$request_uri;# PHP 配置include enable-php-81.conf;# Rewrite rulesinclude /www/server/panel/vhost/rewrite/baidu.org.conf;# 禁止访问的文件或目录location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md){return 404;}# 一键申请SSL证书验证目录相关设置location ~ \.well-known {allow all;}# Static file handlinglocation ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;error_log /dev/null;access_log /dev/null;}location ~ .*\.(js|css)?${expires 12h;error_log /dev/null;access_log /dev/null; }# Loggingaccess_log /www/wwwlogs/baidu.org.log;error_log /www/wwwlogs/baidu.org.error.log;
}
保存并重启 Nginx 。
http3/quic检测
https://http3.wcode.net/
https://http3check.net/
重启nginx报错http2
- 从 Nginx 1.25.0 开始,不再支持在
listen
中使用http3
参数,需要修改为quic
; - 从 Nginx 1.25.1 开始,不再支持在
listen
中使用http2
参数,需要单独一行http2
所以,查找其他站点配置文件,把 http2 去掉,单独一行,比如:
server {listen 443 ssl;listen 443 quic reuseport;http2 on;
浏览器配置
谷歌Chrome浏览器 访问:chrome://flags/
启用:Experimental QUIC protocol (enable-quic)微软新版Edge浏览器 访问:edge://flags
启用:Experimental QUIC protocol 设置为“Enabled”火狐Firefox浏览器 访问:about:config
启用:network.http.http3.enabled
相关文章:

宝塔面板启用 QUIC 与 Brotli 的完整教程
环境 系统:Ubuntu 22.04.4 LTS x86_64 宝塔版本:7.7.0 (可使用本博客提供的一键安装优化脚本) nginx版本:1.26.1 开放UDP端口 注意:在你的服务器商家那里也要开放443 udp端口 sudo ufw allow 443/udp然后重新加载 UFW 以使新…...

Linux 进程调度(二)之进程的上下文切换
目录 一、概述二、上下文切换的实现1、context_switch2、switch_mm3、switch_to 三、观测进程上下文切换 一、概述 进程的上下文切换是指在多任务操作系统中,当操作系统决定要切换当前运行的进程时,将当前进程的状态保存起来,并恢复下一个要…...
Oracle事物临时表
在Oracle数据库中,事务临时表是一种特殊的表类型,主要用于存储在事务处理过程中产生的临时数据。这些表的数据只对当前会话或事务可见,并且在事务结束时会自动清除。 事务临时表的特点 生命周期: 事务临时表中的数据在事务提交或…...

看图学sql之sql的执行顺序
学完前面的内容,我们已经掌握了基本的sql语法了,那我们学的 select, distinct, from, where,group by, having, order by, limit 他们具体的执行顺序是什么样的呢? 语法: SELECT distinct column1, column2 FROM table1 join …...
百日筑基第四十五天-从JAVA8走到JAVA9
JAVA9新特性 Java 9发布于 2017 年 9 月 21 日 。 快速创建不可变集合 增加了List.of()、Set.of()、Map.of() 和 Map.ofEntries()等工厂方法来创建不可变集合(有点参考 Guava 的味道): List.of("Java", "C"); Set.of…...
力扣第五十七题——插入区间
内容介绍 给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示另一个区…...

跟《经济学人》学英文:2024年08月03日这期 India’s economic policy will not make it rich
India’s economic policy will not make it rich A new World Bank report takes aim at emerging-market growth plans 原文: The developing world has fallen back in love with economic planning. As protectionism sweeps the West, poor countries are n…...

js 深拷贝、浅拷贝深度解析
赋值操作: let obj{a:1,b:[1,2,3],c:{m:2}}let newObjobjnewObj.a2newObj.b.push(4)newObj.c.m3console.log(obj,newObj); 将一个对象赋值给一个变量,其实就是将这个对象在栈内存中的引用地址复制给了这个变量,这两个对象指向堆内存中的同一个…...

CSS文本两端对齐
背景 如果我们要写了列表或表单类的样式,名称长短不一,但是想要两端对齐,如下面这样的: 你是怎么写的? 是这样的吗,在HTML里调整加空格: <ul><li>用户名</li><li>账 …...
C#中的foreach和自定义比较
在C#中foreach不能修改集合里面的值 在C#中,使用 foreach 循环遍历集合时,通常不建议修改集合中的元素,因为 foreach 循环是针对集合的枚举器进行操作的,而枚举器通常不支持修改集合中的元素。如果尝试在 foreach 循环中修改集合…...
有序转化数组(LeetCode)
题目 给你一个已经 排好序 的整数数组 和整数 、 、 。对于数组中的每一个元素 ,计算函数值 ,请 按升序返回数组 。 解题 在时间复杂度为解决问题 def sortTransformedArray(nums, a, b, c):def f(x):return a * x * x b * x cn len(nums)result…...

大数据信用报告查询有什么作用?怎么选择查询平台?
随着互联网的快速发展,人们的金融行为越来越多地依赖于网络平台。然而,网络上的金融交易存在着一定的风险,为了有效地防范这些风险,金融机构采用了大数据技术进行风险控制,下面,小易大数据平台将详细介绍大…...
import cv2ModuleNotFoundError: No module named ‘cv2‘
import cv2 ModuleNotFoundError: No module named cv2 (base) PS D:\CAMERA-D861T\LabelImg> pip3 install cv2 ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none) ERROR: No matching distribution found for cv2 办法1 试了无…...

[Modbus] Modbus协议开发-基本概念(一)
历史 ModBus官网是Modicon(Modicon早年已被施耐德收购)公司为其PLC通讯而开发的一种通讯协议。 概述 通过Modbus协议,控制器之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。 优点 免费、好用、成熟…...
爬虫代理的使用:提升爬虫效率
爬虫代理的基本概念 爬虫代理,简单来说,就是位于客户端和目标服务器之间的一个中转站。当爬虫发起请求时,不是直接发送给目标服务器,而是先发送给代理服务器,再由代理服务器转发给目标服务器。目标服务器响应后&#…...
【gcc】基于gpt和python的流程和延迟梯度分析
Core Flow and Algorithm Concepts of GCC (Google Congestion Control) 【TWCC 】基于gpt和python简化分析webrtc拥塞控制论文: Analysis and Design of the Google Congestion Contro for Web Real-time Communication (WebRTC)参考大神的理解发送码率(send bitrate)影响了网…...
前端CSS总结
目录 前言 正文 CSS基础介绍: CSS选择器: 元素选择器: id和class选择器: 后代选择器和群组选择器: 盒子模型 content: padding: border: margin: 字体样式 …...
Linux/C 高级——指针函数
1.概念 本质是函数,函数的返回值为指针。类比着指针数组。 指针数组:本质是数组,数组中存放指针。 数据类型 *数组名[元素个数]; int a[2][3]; int *arr[2] {a[0],a[1]}; //*(*(arri)j) *(arr[i]j) arr[i][j] 2.定义格式 格式: 数…...

GRU门控循环单元【数学+图解】
文章目录 1、简介2、门控机制3、公式4、图解GRU4.1、重置门和更新门4.2、候选隐藏状态和隐藏状态⭐ 5、LSTM与GRU的对比6、应用7、训练技巧 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习ÿ…...
代码随想录算法训练营第六十一天|Bellman_ford 队列优化算法(又名SPFA)、bellman_ford之判断负权回路
卡码网:94. 城市间货物运输 I from collections import dequeclass Edge:def __init__(self, to, val):self.to to # 链接的节点self.val val # 边的权重def main():n, m map(int, input().split())grid [list() for _ in range(n 1)] # 初始化邻接表for _…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...