本质是缺少openssl-devel(RHEL/CentOS)或libssl-dev(Debian/Ubuntu)开发包,而非运行时库;需用rpm/dpkg检查并安装对应开发包,或手动指定OpenSSL源码路径编译。

源码编译 Nginx 时提示缺少 OpenSSL,本质不是“没装 OpenSSL”,而是编译器找不到 开发用的头文件和链接库——也就是 openssl-devel(RHEL/CentOS 系统)或 libssl-dev(Debian/Ubuntu 系统)。只装 openssl 运行时包是不够的。
确认缺失的是开发包,不是运行包
执行以下命令检查:
-
rpm -qa | grep openssl(CentOS/RHEL)→ 看是否含openssl-devel -
dpkg -l | grep ssl(Ubuntu/Debian)→ 看是否含libssl-dev -
ls /usr/include/openssl/ssl.h→ 若报错“No such file”,说明头文件缺失 -
pkg-config --modversion openssl→ 若提示 command not found 或版本为空,说明 pkg-config 无法识别 OpenSSL 开发环境
快速修复:安装对应系统的 OpenSSL 开发包
别自己编译 OpenSSL,除非你明确需要特定版本。优先用系统包管理器安装标准开发包:
-
CentOS 7 / 银河麒麟 V10 / UOS:
yum install -y openssl-devel -
CentOS 8+ / Rocky / AlmaLinux:
dnf install -y openssl-devel -
Ubuntu 20.04+ / Debian 11+:
apt-get update && apt-get install -y libssl-dev
装完再运行 ./configure --with-http_ssl_module,通常就能通过检测。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
如果系统太旧(如 CentOS 7 默认只有 OpenSSL 1.0.2),但你要编译支持 TLS 1.3 的 Nginx
这时系统自带的 openssl-devel 版本太低,configure 会报 “OpenSSL version too old”。你需要手动指定新版 OpenSSL 源码路径:
- 下载 OpenSSL 1.1.1w 或 3.0.13(推荐 LTS 版本):
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz - 解压并编译安装(不覆盖系统默认):
tar zxf openssl-1.1.1w.tar.gz && cd openssl-1.1.1w && ./config --prefix=/usr/local/openssl-1.1.1w --openssldir=/usr/local/openssl-1.1.1w && make && sudo make install - 回到 Nginx 源码目录,显式指定路径:
./configure --with-http_ssl_module --with-openssl=/path/to/openssl-1.1.1w
注意:--with-openssl 后跟的是 源码目录路径,不是 /usr/local/openssl-1.1.1w 这类安装后路径;Nginx 编译过程会自动在该目录下执行 make 并链接生成的库。
编译通过但启动时报 libssl.so.1.1 not found?那是运行时问题,不是编译问题
这属于部署阶段的动态链接问题,和 configure 阶段无关。常见于:
- 你用了
--with-openssl编译,但没把新 OpenSSL 的lib目录加入/etc/ld.so.conf.d/并执行ldconfig - 系统里有多个 OpenSSL 版本,
ldd $(which nginx) | grep ssl显示链接到了错误路径 - 直接拷贝了别人编译好的二进制 nginx 到本机(最常见诱因)
解决方法不是重装开发包,而是确保运行时能定位到正确的 libssl.so.1.1 文件,并验证符号版本兼容性(比如用 objdump -T /usr/local/openssl-1.1.1w/lib/libssl.so.1.1 | grep OPENSSL_1_1_1)。

















