必须重新编译nginx——这是唯一有效方式;因其默认静态链接openssl,不读取系统动态库,故升级系统openssl无效,需通过nginx -v确认静态链接后,下载源码、复用原参数指定新openssl路径,执行make upgrade实现无缝升级。

必须重新编译 Nginx —— 这是唯一有效方式。Nginx 默认静态链接 OpenSSL,不读取系统已安装的动态库,所以升级系统自带的 OpenSSL(如用 yum update openssl 或 apt install openssl)对它完全无效。
确认当前是否静态链接 OpenSSL
运行以下命令:
nginx -V
重点检查输出中是否包含以下任一内容:
- --with-http_ssl_module(表示启用了 SSL 支持)
- --with-openssl= 后跟具体路径(如 --with-openssl=/opt/src/openssl-1.1.1w)
- built with OpenSSL x.x.x(明确显示编译时绑定的版本)
只要出现其中一项,就说明 OpenSSL 是源码内嵌、静态链接的,必须重编译才能更新。
下载并准备新版 OpenSSL 源码
不要使用包管理器安装的二进制 OpenSSL(如 openssl11 或 libssl-dev),Nginx 编译需要的是源码目录,不是安装后的库文件。
- 从 openssl.org/source 下载稳定版源码包,例如 openssl-3.0.13.tar.gz(2026 年最新 LTS 版本)
- 解压到与 Nginx 源码同级目录,如:/opt/src/openssl-3.0.13
- 无需执行 make install,Nginx 的 configure 脚本会自动调用其构建流程
复用原参数并指定新 OpenSSL 路径
这是避免功能丢失的关键步骤:
- 提取原始编译参数:nginx -V 2>&1 | grep "configure arguments:"
- 进入 Nginx 源码目录(如 nginx-1.24.0),执行:
- ./configure $(原参数) --with-openssl=/opt/src/openssl-3.0.13
- 若原参数不含 --with-http_ssl_module,必须显式加上;若已含,无需重复
- 避免随意添加 --with-openssl-opt,除非你明确需要启用 TLS 1.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、X25519 密钥交换、ChaCha20 加密、以及 CVE-2023-4807 等近期安全补丁均已启用,无需重启服务或修改配置文件。











