升级宝塔 Nginx 的 OpenSSL 版本并优化 HTTP3 性能
新版的宝塔面板支持 Nginx 1.25 及以上版本,这意味着用户可以通过 Nginx 开启 HTTP3。但宝塔安装脚本中默认编译的 OpenSSL 版本太旧,为了提升性能和兼容性,建议升级一下。本文将详细介绍如何升级宝塔 Nginx 的 OpenSSL 版本(编译安装)并优化 HTTP3 性能。
前言
为什么要升级宝塔 Nginx 的 OpenSSL 版本?
经笔者实际测试,在 Linux 面板 8.2.0 中,不论你的服务器系统是什么版本的 OpenSSL,宝塔中编译安装的 Nginx 使用的是 OpenSSL 1.1.1,以 Nginx 1.26.1 安装为例,使用 nginx -V
查看编译详情:
对于 Nginx 启用 HTTP3 而言,OpenSSL 1.1.1q 可以使用,但出于兼容性与性能优化考虑,建议将它替换成 OpenSSL 3.3 + 或 BoringSSL(由 Google 维护的 OpenSSL 分支)。
Nginx 官方给出的建议是 BoringSSL、LibreSSL 或 QuicTLS (给出建议的时候 OpenSSL 3.3 还没有发布)。
笔者推荐使用 OpenSSL 3.3+,因为它相较于其它分支被更多的系统和应用采用。
升级 OpenSSL 会有哪些方面的好处
使用 OpenSSL 3.3+ 相比于 OpenSSL 1.1.1,对 QUIC 的支持确实有了显著的提升,主要体现在以下几个方面:
- QUIC 协议的进阶支持:OpenSSL 3.3 对 QUIC 提供了更全面的支持,包括对 qlog 跟踪 QUIC 连接的能力,这意味着开发者可以更好地调试和监控 QUIC 连接的状态。
- 管理 QUIC 连接空闲超时的API:新增的 API 允许更细粒度地控制 QUIC 连接的生命周期,例如设置连接在无数据传输后的空闲超时时间,提高了资源管理的灵活性。
- 流处理与连接性能优化:通过引入新的优化措施,OpenSSL 3.3 改进了 QUIC 流的处理方式和连接的整体性能,有助于提升基于 QUIC 应用的响应速度和吞吐量。
- QUIC 服务器端增强:虽然 OpenSSL 3.2 系列开始增加了对 QUIC 客户端的支持,但 OpenSSL 3.3 进一步增强了 QUIC 服务器端的功能,使得服务器实现更加成熟稳定。
- 高级 API 功能:除了QUIC本身的支持外,OpenSSL 3.3还引入了其他高级API,这些API可能间接影响QUIC的实现,比如对加密算法的优化,特别是针对特定平台(如 Microsoft Azure Cobalt 100、ARM Neoverse V1/V2 处理器、Apple Silicon M3 以及 LoongArch64 )的硬件加速支持,这些都能提升QUIC数据传输的安全性和效率。
综上所述,OpenSSL 3.3 在 QUIC 支持上不仅提供了更全面的功能,还在性能优化、调试便利性以及跨平台兼容性方面取得了进步。
升级宝塔 Nginx 的 OpenSSL 版本具体步骤
下载新版 OpenSSL
cd /www/server
git clone git://git.openssl.org/openssl.git
或
git clone https://github.com/openssl/openssl.git
如果以上方式下载失败(境内服务器)可从官网下载 3.3.1 或以上版本,上传至服务器并解压至/www/server
目录。注意:不论下载的是哪个版本,需要将目录改名为:/www/server/openssl
,否则后面的步骤会出错。
修改宝塔面板的 Nginx 安装脚本
首先下载宝塔原版的 Nginx 安装脚本:
cd /www/server/panel/install
wget -O zzbnginx.sh https://dg2.bt.cn/install/3/nginx.sh
编辑 zzbnginx.sh 文件(可使用面板自带的编辑器),在大约 248 行找到如下内容:
if [ -z "${GMSSL}" ]; then
TLSv13_NGINX=$(echo ${nginxVersion} | tr -d '.' | cut -c 1-3)
if [ "${TLSv13_NGINX}" -ge "115" ] && [ "${TLSv13_NGINX}" != "181" ]; then
opensslVer="1.1.1q"
else
opensslVer="1.0.2u"
fi
# if [ "$version" == "1.23" ];then
# opensslVer="3.0.5"
# fi
wget -O openssl.tar.gz ${download_Url}/src/openssl-${opensslVer}.tar.gz
tar -xvf openssl.tar.gz
mv openssl-${opensslVer} openssl
rm -f openssl.tar.gz
else
……省略
改为:
if [ -z "${GMSSL}" ]; then
cp -r /www/server/openssl .
cd openssl
./config
make
cd ..
else
保存后,执行以下指令编译安装 Nginx,如以前已安装 Nginx 则先卸载。
sh zzbnginx.sh install 1.27
这里选择的是 1.27.1 版,这是当前 Nginx 支持 HTTP3 最稳定的版本,如果需要改版本号。改掉数字就行了。注意后面的小版本号不要输入,当前输入 1.26 即等于 1.26.1 版。
安装完成后,使用 nginx -V
查看编译详情:
以后如 Nginx 发布了新的稳定版,则需要重新下载宝塔原版的 Nginx 安装脚本再按本教程方法修改后安装,除非宝塔官方升级了安装脚本中的 OpenSSL 版本就无需修改了。
注意事项
这里升级的 OpenSSL 版本仅适用于 Nginx,并不改变服务器操作系统中的版本。
因 OpenSSL 3.3.1及以上版本发布不久,为了确保兼容性,建议升级至较新的服务器系统与相关软件。
Nginx HTTP3 模块的优化建议
有关于 ngx_http_v3_module 详细介绍可参考:Nginx 的官方文档。
如果是 Nginx 1.26+,可将宝塔站点配置中的参数做如下调整:
add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';
改为:
add_header Alt-Svc 'h3=":443"; ma=86400,h3-29=":443"; ma=86400,h3-Q050=":443"; ma=86400,quic=":443"; ma=86400; v="46,43"';
升级 OpenSSL 版本后建议添加:
ssl_early_data on;
该指令可以在 server 块中,例如:加在 ssl_session_timeout
指令下方。
如服务器的性能较强,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 操作的频率,可能对性能有所提升,特别是在处理大块数据传输时。
不过需要注意的是:这两个参数的值越大,占用的内存较多。
本文章搬运至:升级宝塔 Nginx 的 OpenSSL 版本并优化 HTTP3 性能 - 站长帮