必须安装 openssl 开发包(如 openssl-devel 或 libssl-dev)并显式指定头文件和库路径,因 nginx 编译依赖 ssl.h、libssl.a/.so 等开发文件,而非仅运行时的 openssl 命令;多版本共存时需用 --with-openssl-includes、--with-openssl-libraries 及 pkg_config_path 精准绑定。

编译 Nginx 时提示 “SSL modules require the OpenSSL library” 或 “no OpenSSL library found”,不是因为没装 OpenSSL 命令,而是缺少开发所需的头文件、静态/动态库,或路径不匹配。关键在于区分运行环境和编译环境,再精准指定路径。
确认是否真缺 openssl-devel(开发包)
系统自带的 openssl 命令只是运行时工具,不包含编译必需的 ssl.h、libssl.a、pkg-config openssl.pc 等。必须安装对应发行版的开发包:
- CentOS/RHEL:运行
yum install -y openssl-devel - Ubuntu/Debian:运行
apt install -y libssl-dev - 验证是否成功:
ls /usr/include/openssl/ssl.h和pkg-config --modversion openssl应正常返回版本
多版本 OpenSSL 共存时强制指定路径
若你手动编译安装了新版 OpenSSL(如 1.1.1w 或 3.0.x)到 /opt/openssl-1.1.1w/install,Nginx 默认不会识别它。configure 必须显式绑定头文件和库位置:
- 用
--with-openssl-includes指向 include 目录(如/opt/openssl-1.1.1w/install/include) - 用
--with-openssl-libraries指向 lib 目录(如/opt/openssl-1.1.1w/install/lib) - 额外加固:加上
--with-cc-opt="-I/path/to/include"和--with-ld-opt="-L/path/to/lib -Wl,-rpath,/path/to/lib",避免链接阶段找错 .so
检查并清理 pkg-config 干扰
Nginx configure 会优先读取 openssl.pc 文件,如果系统中存在多个该文件(比如 /usr/lib64/pkgconfig/openssl.pc 指向旧版),即使加了 --with-openssl 参数也无效:
- 执行
find /usr -name openssl.pc 2>/dev/null查所有位置 - 临时重命名旧的
openssl.pc(如改为openssl.pc.bak),或设置PKG_CONFIG_PATH=/opt/openssl-1.1.1w/install/lib/pkgconfig再运行 configure - 确认生效:
pkg-config --cflags openssl应输出你指定路径下的 -I
库文件路径未被链接器识别?补软链或更新 ldconfig
configure 通过了,但 make 阶段报 undefined reference to SSL_*,说明链接时找不到 libssl.so:
- 检查目标库是否存在:
ls /opt/openssl-1.1.1w/install/lib/libssl.so* - 若只有
libssl.so.1.1,可建软链:ln -sf libssl.so.1.1 /opt/openssl-1.1.1w/install/lib/libssl.so - 或让系统全局识别:
echo "/opt/openssl-1.1.1w/install/lib" > /etc/ld.so.conf.d/openssl.conf && ldconfig











