在 CentOS 7.9 上编译 Nginx 并启用 SSL 模块时遇到缺少 OpenSSL 源码的编译问题及解决方案

文章目录

  • 问题描述
  • 问题原因
  • 解决方案
    • [步骤 1:安装 OpenSSL 源码](#步骤 1:安装 OpenSSL 源码)
    • [步骤 2:清理 Nginx 编译缓存](#步骤 2:清理 Nginx 编译缓存)
    • [步骤 3:编译和安装 OpenSSL](#步骤 3:编译和安装 OpenSSL)
    • [步骤 4:重新配置 Nginx](#步骤 4:重新配置 Nginx)
    • [步骤 5:编译和安装 Nginx](#步骤 5:编译和安装 Nginx)
    • [步骤 6:检查 Nginx 是否成功启动](#步骤 6:检查 Nginx 是否成功启动)
    • [步骤 7:配置 Nginx SSL](#步骤 7:配置 Nginx SSL)
    • [步骤 8:重启 Nginx](#步骤 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 的配置文件。

问题原因

  1. OpenSSL 没有正确安装 :

    在 Nginx 编译时,必须提供 OpenSSL 的源码路径。直接安装 OpenSSL 包并不能为 Nginx 提供所需的源码文件,而是需要下载和编译 OpenSSL 源码。

  2. 缺少 OpenSSL 的源码路径 :

    Nginx 编译时需要 OpenSSL 的源码目录,而不是只是安装的动态库路径。因此,必须指定 OpenSSL 的源码路径。

解决方案

下面我们将分步骤解决问题。

步骤 1:安装 OpenSSL 源码

首先,确保下载并解压 OpenSSL 源码包。以 OpenSSL 1.0.2u 为例,执行以下命令:

bash 复制代码
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 源码目录,执行以下命令:

bash 复制代码
cd /usr/local/nginx-1.26.2
make clean

这将清除 Nginx 之前的编译缓存,确保从干净的状态开始编译。

步骤 3:编译和安装 OpenSSL

在 /usr/local/openssl-1.0.2u 目录下,使用以下命令配置 OpenSSL:

bash 复制代码
./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:

  1. 打开环境变量配置文件:

    bash 复制代码
    vi /etc/profile
  2. 在文件末尾添加以下内容:

    bash 复制代码
    export PATH=/usr/local/openssl/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH
  3. 保存并生效:

    bash 复制代码
    source /etc/profile

验证:

bash 复制代码
openssl version

步骤 4:重新配置 Nginx

在重新配置 Nginx 时,需要指定正确的 OpenSSL 源码路径。进入 Nginx 源码目录,执行以下命令:

bash 复制代码
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:

bash 复制代码
make
sudo make install

这样,Nginx 将会使用你编译并安装的 OpenSSL 库,并且启用了 SSL 支持。

步骤 6:检查 Nginx 是否成功启动

编译并安装完成后,检查 Nginx 是否正确启动。首先,验证 Nginx 是否正在运行:

bash 复制代码
ps -ef | grep nginx

如果 Nginx 正常运行,你应该能够看到类似如下的输出:

复制代码
root     13651     1  0 15:15 ?        00:16:08 /usr/local/nginx/sbin/nginx

如果 Nginx 没有启动,可以手动启动 Nginx:

bash 复制代码
sudo /usr/local/nginx/sbin/nginx

步骤 7:配置 Nginx SSL

确保 Nginx 配置文件中的 SSL 相关设置正确。以下是一个简单的配置示例:

nginx 复制代码
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 配置:

bash 复制代码
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 服务的安全性。

相关推荐
开源必胜15 小时前
Socket、异步非阻塞 I/O 与 NGINX、Netty 模型
网络·tcp/ip·nginx
NiceZack21 小时前
Hadoop 部署全流程教程:从新装 CentOS 到伪分布式与完全分布式
hadoop·分布式·centos
Jack N2 天前
【Strapi 系列之八】二次开发 + 生产部署,Docker + PostgreSQL + Nginx 一把梭
nginx·docker·postgresql·strapi
DevLoom_3 天前
macOS 命令行 curl/git 报 SSL 证书错误?eMudhra 事件完整修复指南
git·macos·ssl
闲云自留地3 天前
K8s Ingress 全解:ingress-nginx 部署、域名路径路由、HTTPS 限流灰度一篇通
nginx·https·kubernetes
zxanz13 天前
国密 SM2 SSL 证书和国际证书怎么选,一文理清差异
https·ssl
宁波阿成3 天前
CentOS 7 环境下 Tomcat 8.5 升级至 9.0.123 操作总结
linux·centos·tomcat
幽默小吴3 天前
nginx篇
运维·nginx
maochongsandai1103 天前
Centos上运行docker应用命令汇总
linux·docker·centos
正经教主3 天前
【FDE系列】阶段2:Day 45(up详细版):综合实战 — Docker + Nginx + Git 完整部署与本周收官
人工智能·git·nginx·docker·fde