必须重编译Nginx:先用nginx -V确认其静态链接OpenSSL(含--with-openssl=路径或built with OpenSSL版本),再下载OpenSSL源码(如3.0.13),最后复用原configure参数并替换OpenSSL路径重新编译,执行make upgrade完成无中断升级。

直接重编译 Nginx 并内嵌新 OpenSSL 源码,是唯一可靠方式。Nginx 不加载系统动态 OpenSSL 库,静态链接才是它的默认行为——所以“升级系统 OpenSSL”对它完全无效。
确认当前是否静态链接 OpenSSL
运行 nginx -V,重点看输出中是否含:
-
--with-http_ssl_module(启用 SSL 支持) -
--with-openssl=...或明确列出 OpenSSL 路径(说明是源码内嵌) -
built with OpenSSL x.x.x(显示编译时绑定的版本)
只要出现上述任一特征,就代表 OpenSSL 是静态编译进 Nginx 的,必须重新编译才能更新。
下载并准备新版 OpenSSL 源码
不要用包管理器装的系统 OpenSSL(如 openssl11),Nginx 编译时需要的是源码目录,不是安装后的二进制。
- 从 openssl.org/source 下载稳定版,例如
openssl-3.0.13.tar.gz(2026 年最新 LTS) - 解压到与 Nginx 源码同级目录,如:
/opt/src/openssl-3.0.13 - 无需安装它,Nginx
configure会自动调用其构建流程
复用原参数 + 指定新 OpenSSL 路径
这是关键一步,确保功能不丢失、模块不缺失:
- 执行
nginx -V 2>&1 | grep "configure arguments:"提取原始参数 - 进入 Nginx 源码目录(如
nginx-1.24.0),运行:
注意:
-
--with-openssl后跟的是源码路径,不是/usr/local/ssl这类安装路径 - 若原参数已含
--with-http_ssl_module,不必重复;不含则必须加上 - 避免混用
--with-openssl-opt,除非你明确需启用enable-tls1_3或国密等实验特性
编译 & 无中断升级
完成配置后,按标准流程构建:
-
make -j$(nproc)(利用全部 CPU 核心加速) -
make upgrade(Nginx 内置命令,平滑替换主进程,不丢连接)
验证是否生效:
nginx -V | grep -i openssl正确输出应类似:built with OpenSSL 3.0.13 30 May 2026
此时 TLS 1.3、ChaCha20、X25519 等新算法和 CVE-2023-4807 等近期补丁均已生效,无需重启服务或修改配置。


















