Apache源码编译时指定OpenSSL版本必须用--with-ssl=/path/to/openssl指向含lib/和include/的构建输出目录(如make后未install的_prefix路径),不可指向源码根目录或系统开发包路径,且需避免系统openssl-devel干扰探测。

Apache 源码编译时指定特定 OpenSSL 版本,核心是用 --with-ssl= 参数指向已编译(非安装)的 OpenSSL 源码或安装前的输出目录,而不是系统包或头文件路径。它不接受预编译库路径,也不识别 openssl-devel 这类开发包。
必须使用 --with-ssl 指向 OpenSSL 构建输出目录
Apache 的 ./configure 脚本通过 --with-ssl=/path/to/openssl 查找 include/openssl/ 和 lib/libssl.a(或 .so)等文件。该路径应是 OpenSSL 执行 make install 后的安装前缀目录(如 /usr/local/ssl),或直接指向 make 生成但尚未 make install 的 _build 目录(需确保含 lib/ 和 include/ 子目录)。
- ✅ 正确示例:
./configure --with-ssl=/usr/local/openssl-1.1.1w(前提是make install已执行到该路径) - ✅ 也可用未 install 的构建目录:
./configure --with-ssl=/opt/openssl-1.1.1w/_build(需确认该目录下有lib/libssl.a和include/openssl/) - ❌ 错误做法:指向源码根目录(如
/opt/openssl-1.1.1w),因缺少lib/和include/结构;也不可写--with-ssl=/usr/include/openssl或/usr/lib64
OpenSSL 必须先完成 configure + make(无需 make install)
若你希望 Apache 静态链接 OpenSSL 或完全控制版本,推荐在编译 OpenSSL 时不执行 make install,而是保留构建产物:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 进入 OpenSSL 源码目录,运行:
./config --prefix=/tmp/openssl-build --openssldir=/tmp/openssl-build no-shared - 执行:
make -j$(nproc)(生成libcrypto.a、libssl.a及头文件) - 然后 Apache configure 使用:
--with-ssl=/tmp/openssl-build - 这样 Apache 编译时会直接静态链接这些 .a 文件,避免运行时依赖系统库
避免系统 OpenSSL 开发包干扰
configure 过程中若检测到系统 openssl-devel(CentOS/RHEL)或 libssl-dev(Debian/Ubuntu),可能自动选用旧版本。为确保命中目标版本:
- 临时卸载系统开发包:
yum remove openssl-devel或apt remove libssl-dev - 或在 configure 前设置环境变量屏蔽探测:
export OPENSSL_DIR=/usr/local/openssl-1.1.1w(部分 Apache 版本支持) - 运行
./configure ...后检查输出末尾是否显示:checking for OpenSSL library... found at /usr/local/openssl-1.1.1w
验证是否真正生效
编译安装完成后,确认 Apache 使用的是指定 OpenSSL:
- 查看编译信息:
/usr/local/apache/bin/httpd -V | grep -i openssl→ 应显示路径与版本号 - 检查动态链接(若 OpenSSL 编译为 shared):
ldd /usr/local/apache/bin/httpd | grep ssl - 运行
/usr/local/apache/bin/httpd -t -D DUMP_MODULES 2>/dev/null | grep ssl确保ssl_module已加载

















