在 CentOS 7.9 上编译 Nginx 并启用 SSL 模块时遇到缺少 OpenSSL 源码的编译问题及解决方案
文章目录
- 问题描述
- 问题原因
- 解决方案
- 步骤 1:安装 OpenSSL 源码
- 步骤 2:清理 Nginx 编译缓存
- 步骤 3:编译和安装 OpenSSL
- 步骤 4:重新配置 Nginx
- 步骤 5:编译和安装 Nginx
- 步骤 6:检查 Nginx 是否成功启动
- 步骤 7:配置 Nginx SSL
- 步骤 8:重启 Nginx
- 总结
在 Linux 系统上,Nginx 是一个高效的 Web 服务器和反向代理服务器。安装和配置 Nginx 时,启用 SSL 模块是确保数据传输安全的关键步骤。然而,在某些情况下(尤其是在 CentOS 7.9 上),你可能会遇到 Nginx 编译过程中提示缺少 OpenSSL 源码的错误。直接安装 OpenSSL 并不能解决问题,必须从源码编译 OpenSSL。下面,我们将详细讲解如何解决这个问题,确保 Nginx 在启用 SSL 模块的情况下顺利编译和运行。
问题描述
在 CentOS 7.9 上编译 Nginx并启用 SSL 模块(./configure --with-http_ssl_module ) 时,如果未正确配置 OpenSSL,通常会遇到以下错误:
make: *** [objs/Makefile] Error 127
具体错误信息为:
/bin/sh: line 2: ./config: No such file or directory
这表明 OpenSSL 的编译脚本未找到,Nginx 编译时无法正确加载 OpenSSL 的配置文件。
问题原因
-
OpenSSL 没有正确安装:
在 Nginx 编译时,必须提供 OpenSSL 的源码路径。直接安装 OpenSSL 包并不能为 Nginx 提供所需的源码文件,而是需要下载和编译 OpenSSL 源码。 -
缺少 OpenSSL 的源码路径:
Nginx 编译时需要 OpenSSL 的源码目录,而不是只是安装的动态库路径。因此,必须指定 OpenSSL 的源码路径。
解决方案
下面我们将分步骤解决问题。
步骤 1:安装 OpenSSL 源码
首先,确保下载并解压 OpenSSL 源码包。以 OpenSSL 1.0.2u 为例,执行以下命令:
cd /usr/local
tar -xzvf /path/to/openssl-1.0.2u.tar.gz
cd /usr/local/openssl-1.0.2u
确保解压后的目录中包含 config
文件和其他源码文件。
步骤 2:清理 Nginx 编译缓存
如果之前已经尝试过编译 Nginx,但由于缺少 OpenSSL 源码而失败,最好先清理编译缓存。进入 Nginx 源码目录,执行以下命令:
cd /usr/local/nginx-1.26.2
make clean
这将清除 Nginx 之前的编译缓存,确保从干净的状态开始编译。
步骤 3:编译和安装 OpenSSL
在 /usr/local/openssl-1.0.2u
目录下,使用以下命令配置 OpenSSL:
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make
make install
#安装完成后,检查 OpenSSL 的版本是否正确:
/usr/local/openssl/bin/openssl version
这将会安装 OpenSSL 到 /usr/local/openssl
目录。
同时也可以更新系统环境变量:
将 /usr/local/openssl/bin
添加到系统的 PATH
中,以确保系统优先使用新版本的 OpenSSL:
-
打开环境变量配置文件:
vi /etc/profile
-
在文件末尾添加以下内容:
export PATH=/usr/local/openssl/bin:$PATH export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH
-
保存并生效:
source /etc/profile
验证:
openssl version
步骤 4:重新配置 Nginx
在重新配置 Nginx 时,需要指定正确的 OpenSSL 源码路径。进入 Nginx 源码目录,执行以下命令:
cd /usr/local/nginx-1.26.2
./configure --with-http_ssl_module --with-openssl=/usr/local/openssl-1.0.2u
这一步确保了 Nginx 使用正确的 OpenSSL 源码路径,并启用 SSL 模块。
步骤 5:编译和安装 Nginx
配置完成后,使用以下命令编译和安装 Nginx:
make
sudo make install
这样,Nginx 将会使用你编译并安装的 OpenSSL 库,并且启用了 SSL 支持。
步骤 6:检查 Nginx 是否成功启动
编译并安装完成后,检查 Nginx 是否正确启动。首先,验证 Nginx 是否正在运行:
ps -ef | grep nginx
如果 Nginx 正常运行,你应该能够看到类似如下的输出:
root 13651 1 0 15:15 ? 00:16:08 /usr/local/nginx/sbin/nginx
如果 Nginx 没有启动,可以手动启动 Nginx:
sudo /usr/local/nginx/sbin/nginx
步骤 7:配置 Nginx SSL
确保 Nginx 配置文件中的 SSL 相关设置正确。以下是一个简单的配置示例:
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /usr/local/nginx/html;
index index.html;
}
}
在配置文件中,指定证书文件和私钥文件的路径,并设置 SSL 协议和加密套件。
步骤 8:重启 Nginx
修改配置文件后,需要重新加载 Nginx 配置:
sudo /usr/local/nginx/sbin/nginx -s reload
这将使 Nginx 重新加载配置文件,启用 SSL 支持。
总结
在 CentOS 7.9 上编译 Nginx 并启用 SSL 模块时,如果没有正确配置 OpenSSL 源码路径,Nginx 编译将失败。通过手动安装 OpenSSL 源码并指定其路径,可以顺利完成 Nginx 编译,并启用 HTTPS 支持。同时,确保配置文件中的 SSL 设置正确,Nginx 可以顺利提供安全的 HTTPS 服务。
通过本篇博客,大家可以了解到如何在 CentOS 系统上解决 Nginx 编译过程中缺少 OpenSSL 源码的问题,并成功启用 SSL 模块来提升 Web 服务的安全性。