源码编译 Nginx 时集成自定义 OpenSSL,必须指定 OpenSSL 源码根目录(如 /usr/src/openssl-3.0.13)而非已安装路径,确保 configure 输出“using OpenSSL from”且 nginx -V 显示对应版本,才能启用 TLS 1.3 等强加密功能。

源码编译 Nginx 时集成自定义 OpenSSL,关键不是指定“已安装的库路径”,而是把 OpenSSL 源码目录本身传给 Nginx 的 configure 脚本。系统自带或 yum/apt 安装的 openssl-devel 包无法满足新版 TLS 或安全加固需求,必须用原始源码参与编译。
准备 OpenSSL 源码目录
从 OpenSSL 官网下载完整 tarball(如 openssl-3.0.13.tar.gz),解压到任意位置,例如 /usr/src/openssl-3.0.13:
- 不要运行
make install,保留原始源码结构 - 确认该目录下存在
Configure、include/、crypto/等子目录和文件 - 若之前装过其他 OpenSSL 版本,建议先卸载系统开发包(如
yum remove openssl-devel),避免 configure 自动探测到旧头文件
在 Nginx configure 中正确引用
进入 Nginx 源码根目录(如 /usr/src/nginx-1.28.0),执行 configure 命令时使用:
-
--with-openssl=/usr/src/openssl-3.0.13:路径必须是 OpenSSL 解压后的顶层目录,不是include/或lib/ - 无需再加
--with-http_ssl_module,它默认启用且依赖 OpenSSL - 如需定制 OpenSSL 编译行为,可追加
--with-openssl-opt="enable-tls1_3 no-asm",参数会透传给 OpenSSL 的 Configure 脚本
验证是否成功集成
configure 执行完成后,终端应输出类似:
checking for OpenSSL library found + using OpenSSL from /usr/src/openssl-3.0.13编译安装后进一步确认:
-
objs/nginx -V 2>&1 | grep -i openssl→ 应显示built with OpenSSL 3.0.13 -
ldd objs/nginx | grep ssl→ 若动态链接,会看到libssl.so.3类似路径;若静态链接则无输出,属正常 - 启动 Nginx 后,用
openssl s_client -connect your-server:443 -tls1_3实测协议支持
常见失败原因
configure 报错 “OpenSSL not found” 或版本不符,通常因为:
- 路径指向了子目录(如
/usr/src/openssl-3.0.13/include)而非源码根目录 - 用
git clone下载但未 checkout 正式 release tag,缺少Configure文件或生成逻辑 - 源码包不完整(比如删了
.git后没补全 auto-generated 文件),建议始终用官网 tarball


















