在 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 服务的安全性。

相关推荐
難釋懷4 小时前
Nginx对客户端的限制
运维·nginx
楠目6 小时前
CVE-2017-7529 Nginx Range头整数溢出漏洞利用总结
运维·nginx
java知路6 小时前
centos euler离线下载docker镜像
linux·docker·centos
极创信息10 小时前
信创产品适配测试认证,域名和SSL是必须的吗?
java·开发语言·网络·python·网络协议·ruby·ssl
難釋懷10 小时前
Nginx缓冲区
前端·javascript·nginx
ElevenS_it1881 天前
Nginx日志监控告警实战:access_log解析+5xx突增+慢请求+异常IP自动告警完整方案(Filebeat+Zabbix)
运维·网络·tcp/ip·nginx·zabbix
半夜燃烧的香烟1 天前
docker 安装minio nginx,配置nginx根据文根路由minio展示图片
java·nginx·docker
Lang-12101 天前
CentOS Linux服务器完整迁移方案
linux·服务器·centos
火山上的企鹅1 天前
Codex实战:APP远程升级服务搭建(二)阿里云ECS部署Node升级服务_Ubuntu_systemd_Nginx
nginx·ubuntu·阿里云·qgc
難釋懷1 天前
Nginx-UpStream工作流程
运维·nginx