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

要让 Nginx 支持 OpenSSL 3.x 的新特性(如 TLS 1.3 完整支持、国密 SM2/SM4 实验性接口、更强的随机数生成器、FIPS 模式等),不能靠系统升级或动态替换,必须在编译期将新版 OpenSSL 源码静态链接进 Nginx。这是唯一生效的方式。
确认当前 Nginx 是否静态链接 OpenSSL
运行以下命令:
nginx -V 2>&1 | grep -E "(with-openssl=|built with OpenSSL|with-http_ssl_module)"若输出中包含:
- --with-openssl=/path/to/openssl-src(明确指定源码路径)
- built with OpenSSL 1.1.1xx 或 OpenSSL 3.0.x(显示具体版本)
- --with-http_ssl_module(SSL 模块已启用)
则说明 OpenSSL 是静态编译进 Nginx 的——此时更新必须重编译。
下载并准备 OpenSSL 3.x 源码
Nginx configure 脚本需要的是 OpenSSL 源码目录,不是已安装的库文件。不要用 apt/yum 安装的 openssl 或 openssl11 包。
- 从 openssl.org/source 下载稳定版,例如 openssl-3.0.13.tar.gz(2026 年最新 LTS 版本)
- 解压到与 Nginx 源码同级路径,如:/opt/src/openssl-3.0.13
- 无需执行 ./config && make install ——Nginx 编译时会自动调用其构建流程
复用原配置参数,指定新 OpenSSL 路径重编译
关键在于保留原有功能模块不丢失,同时注入新版 OpenSSL:
- 提取原始编译参数:nginx -V 2>&1 | grep "configure arguments:"
- 进入 Nginx 源码目录(如 nginx-1.24.0),执行:
注意:
- 如果原参数不含 --with-http_ssl_module,必须显式加上
- --with-openssl 后跟的是源码路径,不是 /usr/local/ssl 这类安装路径
- 如需启用 TLS 1.3 强制策略或国密支持,可追加:--with-openssl-opt="enable-tls1_3 enable-ec_nistp_64_gcc_128"(按需启用,非默认)
完成编译升级并验证新特性
执行编译与热升级(避免服务中断):
- make -j$(nproc)(推荐多核加速)
- sudo make upgrade(平滑替换二进制,不重启 worker 进程)
验证是否生效:
- nginx -V 查看是否显示 built with OpenSSL 3.0.13
- 用 openssl s_client -connect example.com:443 -tls1_3 测试 TLS 1.3 握手
- 检查响应头是否含 ALPN: h2,http/1.1 和 TLS server name: example.com
至此,Nginx 已具备 OpenSSL 3.x 全部底层能力,后续 HTTPS 配置(如 ssl_protocols TLSv1.2 TLSv1.3、ssl_ciphers 细粒度控制)才能真正启用新算法与安全机制。


















