ubuntu 22.04 编译安装nignx 报错 openssl 问题
前言
Ubuntu 20.04 中安装 Nginx (通过传包编译的方式)、开启关闭防火墙、开放端口号
在ubuntu 22.04.3 服务器上照着上面的文章 通过传包编译的方式安装nginx-1.18.0 的时候报错,报错内容如下:
src/event/ngx_event_openssl.c: In function ‘ngx_ssl_load_certificate_key’:
src/event/ngx_event_openssl.c:721:9: error: ‘ENGINE_by_id’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]721 | engine = ENGINE_by_id((char *) p);| ^~~~~~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:336:31: note: declared here336 | OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id);| ^~~~~~~~~~~~
src/event/ngx_event_openssl.c:730:9: error: ‘ENGINE_load_private_key’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]730 | pkey = ENGINE_load_private_key(engine, (char *) last, 0, 0);| ^~~~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:638:11: note: declared here638 | EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,| ^~~~~~~~~~~~~~~~~~~~~~~
src/event/ngx_event_openssl.c:734:13: error: ‘ENGINE_free’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]734 | ENGINE_free(engine);| ^~~~~~~~~~~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:493:27: note: declared here493 | OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e);| ^~~~~~~~~~~
src/event/ngx_event_openssl.c:738:9: error: ‘ENGINE_free’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]738 | ENGINE_free(engine);| ^~~~~~~~~~~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:493:27: note: declared here493 | OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e);| ^~~~~~~~~~~
src/event/ngx_event_openssl.c: In function ‘ngx_ssl_dhparam’:
src/event/ngx_event_openssl.c:1334:5: error: ‘PEM_read_bio_DHparams’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]1334 | dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);| ^~
In file included from /usr/include/openssl/ssl.h:36,from src/event/ngx_event_openssl.h:15,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/pem.h:469:1: note: declared here469 | DECLARE_PEM_rw_attr(OSSL_DEPRECATEDIN_3_0, DHparams, DH)| ^~~~~~~~~~~~~~~~~~~
src/event/ngx_event_openssl.c:1344:5: error: ‘DH_free’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]1344 | DH_free(dh);| ^~~~~~~
In file included from /usr/include/openssl/dsa.h:51,from /usr/include/openssl/x509.h:37,from /usr/include/openssl/ssl.h:31,from src/event/ngx_event_openssl.h:15,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/dh.h:204:28: note: declared here204 | OSSL_DEPRECATEDIN_3_0 void DH_free(DH *dh);| ^~~~~~~
src/event/ngx_event_openssl.c: In function ‘ngx_ssl_error’:
src/event/ngx_event_openssl.c:3039:13: error: ‘ERR_peek_error_line_data’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]3039 | n = ERR_peek_error_line_data(NULL, NULL, &data, &flags);| ^
In file included from src/event/ngx_event_openssl.h:16,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/err.h:425:15: note: declared here425 | unsigned long ERR_peek_error_line_data(const char **file, int *line,| ^~~~~~~~~~~~~~~~~~~~~~~~
src/event/ngx_event_openssl.c: In function ‘ngx_ssl_session_ticket_key_callback’:
src/event/ngx_event_openssl.c:3949:9: error: ‘HMAC_Init_ex’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]3949 | if (HMAC_Init_ex(hctx, key[0].hmac_key, size, digest, NULL) != 1) {| ^~
In file included from /usr/include/openssl/ssl.h:37,from src/event/ngx_event_openssl.h:15,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/hmac.h:43:27: note: declared here43 | OSSL_DEPRECATEDIN_3_0 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,| ^~~~~~~~~~~~
src/event/ngx_event_openssl.c:3993:9: error: ‘HMAC_Init_ex’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]3993 | if (HMAC_Init_ex(hctx, key[i].hmac_key, size, digest, NULL) != 1) {| ^~
In file included from /usr/include/openssl/ssl.h:37,from src/event/ngx_event_openssl.h:15,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/hmac.h:43:27: note: declared here43 | OSSL_DEPRECATEDIN_3_0 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,| ^~~~~~~~~~~~
src/event/ngx_event_openssl.c: In function ‘ngx_openssl_engine’:
src/event/ngx_event_openssl.c:5124:5: error: ‘ENGINE_by_id’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]5124 | engine = ENGINE_by_id((char *) value[1].data);| ^~~~~~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:336:31: note: declared here336 | OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id);| ^~~~~~~~~~~~
src/event/ngx_event_openssl.c:5132:5: error: ‘ENGINE_set_default’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]5132 | if (ENGINE_set_default(engine, ENGINE_METHOD_ALL) == 0) {| ^~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:708:27: note: declared here708 | OSSL_DEPRECATEDIN_3_0 int ENGINE_set_default(ENGINE *e, unsigned int flags);| ^~~~~~~~~~~~~~~~~~
src/event/ngx_event_openssl.c:5137:9: error: ‘ENGINE_free’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]5137 | ENGINE_free(engine);| ^~~~~~~~~~~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:493:27: note: declared here493 | OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e);| ^~~~~~~~~~~
src/event/ngx_event_openssl.c:5142:5: error: ‘ENGINE_free’ is deprecated: Since OpenSSL 3.0 [-Werror=deprecated-declarations]5142 | ENGINE_free(engine);| ^~~~~~~~~~~
In file included from src/event/ngx_event_openssl.h:22,from src/core/ngx_core.h:84,from src/event/ngx_event_openssl.c:9:
/usr/include/openssl/engine.h:493:27: note: declared here493 | OSSL_DEPRECATEDIN_3_0 int ENGINE_free(ENGINE *e);| ^~~~~~~~~~~
cc1: all warnings being treated as errors
make[1]: *** [objs/Makefile:842:objs/src/event/ngx_event_openssl.o] 错误 1
make[1]: 离开目录“/home/user/下载/nginx-1.18.0”
make: *** [Makefile:8:build] 错误 2
问题总结
因为之前安装 该方式已经安装了 很多遍nginx 不应该 出现该问题的。尝试安装了几遍都不行,几经辗转终于通过gpt找到了问题所在,并解决。
由于 Nginx 的源码使用了 OpenSSL 中已经在 3.0 版本废弃的 API,而你的系统使用的是 OpenSSL 3.0+,而且 gcc 把所有 warning 都当成 error (-Werror) 处理了,所以编译直接失败。
解决方法
一、升级nginx
下载最新版本的nginx解决兼容性问题,源码是 nginx-1.18.0,这个版本比较旧,不兼容 OpenSSL 3。建议升级到 1.21+(长期支持版)或最新稳定版(比如 1.24.0)
重新下载更高版本的nginx,安装步骤还是按照文章中的来,我才用的也是这种方法。问题解决了
二、去掉-werror
临时避开OpenSSL警告,风险较高
如果还要用 nginx-1.18.0,可以通过 关闭 OpenSSL 废弃函数的警告错误 来绕过:
在 ./configure
之后、make
之前,修改编译参数来去掉 -Werror
sed -i 's/-Werror//g' objs/Makefile
再执行make
make
sudo make install
这会忽略掉 OpenSSL 的废弃警告(不推荐长期这样使用,安全性会下降)。
三、编译OpenSSL 1.1.1
如果不想换 Nginx,可以降级 OpenSSL,但 不建议全局替换系统 OpenSSL,推荐指定路径编译使用:
# 下载 OpenSSL 1.1.1
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config
make
sudo make install# 编译 Nginx 时指定 OpenSSL 路径
cd nginx-1.18.0
./configure --with-http_ssl_module --with-openssl=/path/to/openssl-1.1.1w
make
注意
:本人使用的是第一种 方法解决的,二三两种是gpt给出的解决方法,是否有效还待验证。
相关文章:

ubuntu 22.04 编译安装nignx 报错 openssl 问题
前言 Ubuntu 20.04 中安装 Nginx (通过传包编译的方式)、开启关闭防火墙、开放端口号 在ubuntu 22.04.3 服务器上照着上面的文章 通过传包编译的方式安装nginx-1.18.0 的时候报错,报错内容如下: src/event/ngx_event_openssl.c: In function ‘ngx_ssl…...

线程相关面试题
提示:线程相关面试题,持续更新中 文章目录 一、Java线程池1、Java线程池有哪些核心参数,分别有什么的作用?2、线程池有哪些拒绝策略?3、说一说线程池的执行流程?4、线程池核心线程数怎么设置呢?4、Java线程…...

pikachu通关教程-目录遍历漏洞(../../)
目录遍历漏洞也可以叫做信息泄露漏洞、非授权文件包含漏洞等. 原理:目录遍历漏洞的原理比较简单,就是程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。 这里的目录跳转符可以是../…...

Maven-生命周期
目录 1.项目对象模型 2.依赖管理模型 3.仓库:用于存储资源,管理各种jar包 4.本地仓库路径 1.项目对象模型 2.依赖管理模型 3.仓库:用于存储资源,管理各种jar包 4.本地仓库路径...
Hadoop复习(九)
Azkaban工作流管理器 选择 问题 1 判断题 2 / 2 分 工作流是指具有依赖的一组job任务,被依赖的job任务最后执行 正确 错误 问题 2 判断题 2 / 2 分 Azkaban兼容任何版本的Hadoop 正确 错误 问题 3 判断题 2 / 2 分 独立服务器模式下,Azkab…...

Matlab实现LSTM-SVM回归预测,作者:机器学习之心
Matlab实现LSTM-SVM回归预测,作者:机器学习之心 目录 Matlab实现LSTM-SVM回归预测,作者:机器学习之心效果一览基本介绍程序设计参考资料 效果一览 基本介绍 代码主要功能 该代码实现了一个LSTM-SVM回归预测模型,核心流…...

Spring Boot 自动配置原理:从入门到精通
Spring Boot 的自动配置是其核心特性之一,它极大地简化了 Spring 应用的开发,让开发者可以专注于业务逻辑,而无需编写大量的配置代码。 本文将深入探讨 Spring Boot 自动配置的原理,帮助你理解其工作机制,并能灵活运用…...
实践深度学习:构建一个简单的图像分类器
引言 深度学习在图像识别领域取得了巨大的成功。本文将指导你如何使用深度学习框架来构建一个简单的图像分类器,我们将以Python和TensorFlow为例,展示从数据准备到模型训练的完整流程。 环境准备 在开始之前,请确保你的环境中安装了以下工…...

腾讯 ovCompose 开源,Kuikly 鸿蒙和 Compose DSL 开源,腾讯的“双”鸿蒙方案发布
近日,腾讯的 ovCompose 和 Kuikly 都发布了全新开源更新,其中 Kuikly 在之前我们聊过,本次 Kuikly 主要是正式开源鸿蒙支持部分和 Compose DSL 的相关支持,而 ovCompose 是腾讯视频团队基于 Compose Multiplatform 生态推出的跨平…...

PYTHON调用讯飞C/C++动态库实现离线语音合成并且实时播放
语音合成(Text-to-Speech, TTS)技术在现代应用中扮演着越来越重要的角色,从智能客服到有声读物,从导航系统到辅助工具,TTS技术无处不在。本文将详细介绍如何使用Python结合科大讯飞的离线SDK实现一个本地化的语音合成系统。 技术背景 离线语…...

黑马Java面试笔记之 消息中间件篇(RabbitMQ)
一. 消息丢失问题 RabbitMQ如何保证消息不丢失? 使用场景有: 异步发送(验证码、短信、邮件... )MYSQL和Redis,ES之间的数据同步分布式事务削峰填谷...... 消息丢失原因会有三种情况,分别分析一下 1.1 生…...
Vue中安装插件的方式
一. 认识Vue插件 1.1. 通常向Vue全局添加一些功能时,会采用插件的模式,它有两种编写方式: 1.1.1. 对象类型:一个对象,但是必须包含一个install的函数,该函数会在安装插件时执行 // 方式一:传入…...
如何提高工作效率
最近,跟一个同事同时测同一业务,在对比自己与同事的产出过程中,发现,别人工作效率极高,产出也比较大。最重要的是,别人每天晚上走得早,自己就算加班到九点十点,似乎产出都没别人高。…...

Redisson学习专栏(五):源码阅读及Redisson的Netty通信层设计
文章目录 前言一、分布式锁核心实现:RedissonLock源码深度解析1.1 加锁机制:原子性与重入性实现1.2 看门狗机制:锁自动续期设计1.3 解锁机制:安全释放与通知1.4 锁竞争处理:等待队列与公平性1.5 容错机制:异…...
Spring AI 项目实战(一):Spring AI 核心模块入门
系列文章 序号文章名称1Spring AI 项目实战(一):Spring AI 核心模块入门一、引言:Java 生态下 AI 应用开发的新机遇 在数字化转型浪潮席卷全球的当下,人工智能(AI)技术早已突破实验室的边界,深度融入企业级应用开发核心领域。对于Java开发者而言,如何将成熟稳定的Spr…...
字节跳动开源图标库:2000+图标一键换肤的魔法
一个SVG文件生成四种主题的神奇技术,正在颠覆前端开发者的图标工作流。 深夜两点,设计师小王对着屏幕抓狂——产品经理临时要求将整套线性图标改为双色风格,这意味着他需要重新导出上百个SVG文件。 而隔壁工位的前端小张同样崩溃:…...

结合 AI 生成 mermaid、plantuml 等图表
AI 画图 AI 画图并不是真的让 AI 画一个图片,而是让 AI 根据你的需求,生成对应的需求文本,再根据 “文本画图” 来生成图片。 Mermaid mermaid 支持流程图、时序图、架构图等等多种图片绘制。当然最终生成的效果和样式会根据不同的“文本代…...
行列式详解:从定义到应用
行列式详解:从定义到应用 引言 行列式是线性代数中的核心概念之一,它不仅是矩阵理论的重要组成部分,更是解决线性方程组、计算向量空间体积、判断矩阵可逆性等问题的关键工具。本文将从行列式的基本定义出发,系统地介绍其性质、…...

R语言使用随机过采样(Random Oversampling)平衡数据集
随机过采样(Random Oversampling)是一种用于平衡数据集的技术,常用于机器学习中处理类别不平衡问题。当某个类别的样本数量远少于其他类别时(例如二分类中的正负样本比例悬殊),模型可能会偏向多数类&#x…...
HertzBeat的安装和使用教程
以下是HertzBeat的安装和使用教程: 安装 • Docker安装:执行命令docker run -d -p 1157:1157 -p 1158:1158 --name hertzbeat apache/hertzbeat。启动后,访问http://localhost:1157,默认账号密码是admin/hertzbeat。 • 包安装…...

【Kotlin】高阶函数Lambda内联函数
【Kotlin】简介&变量&类&接口 【Kotlin】数字&字符串&数组&集合 【Kotlin】高阶函数&Lambda&内联函数 【Kotlin】表达式&关键字 文章目录 函数还是属性高阶函数抽象和高阶函数实例: 函数作为参数的需求方法引用表达式更多使用场…...

从0开始学vue:vue3和vue2的关系
一、版本演进关系1. 继承关系2. 版本生命周期 二、核心差异对比三、关键演进方向1. Composition API2. 性能优化 四、迁移策略1. 兼容构建模式2. 关键破坏性变更 五、生态演进1. 官方库升级2. 构建工具链 六、选型建议1. 新项目2. 现有项目 七、未来展望 一、版本演进关系 1. …...

MySQL关系型数据库学习
学习参考链接:https://www.runoob.com/mysql/mysql-tutorial.html Windows 安装MYSQL服务端的步骤:https://www.runoob.com/w3cnote/windows10-mysql-installer.html 1. 概念学习 MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不…...

嵌入式硬件篇---龙芯2k1000串口
针对串口错误 “device reports readiness to read but returned no data (Device disconnected or multiple access on port?)” 的排查和解决方法 硬件方面 检查连接 确认串口设备(如串口线、连接的模块等)与龙芯设备之间的物理连接是否牢固…...
4-C#的不同窗口传值
C#的不同窗口传值 1.通过构造函数传值 this.Hide(); Form1 form01 new Form1(textBox2.Text); //Application.Run(form01); form01.Show();public Form1(string aaa) {InitializeComponent();label12.Text aaa; }2.全局类传值 namespace WindowsFormsApp1 {public class G…...

谷歌地图苹果版v6.138.2 - 前端工具导航
谷歌地图(Google maps)苹果版是是由谷歌官方推出的一款手机地图应用。软件功能强大,支持本地搜索查找世界各地的地址、地点和商家;支持在街景视图中查看世界各地的360度全景图;支持查找乘坐火车、公交车和地铁的路线,或者查找步行…...

NSSCTF [LitCTF 2025]test_your_nc
[复现]绕过学的还是太差了,多积累吧 题目 题目: 给了一个python文件 #!/bin/python3 import osprint("input your command")blacklist [cat,ls, ,cd,echo,<,${IFS},sh,\\]while True:command input()for i in blacklist:if i in com…...
第十九章 正则表达式
第十九章 正则表达式 文本型数据在所有的类UNIX系统(如 Linux)中会扮演着重要角色,在完全领会这些工具的全部特征之前,要先了解一下工具最为复杂的用法和相关技术:正则表达式。 什么是正则表达式 简单地说,正则表达式是一种用于…...
browser-use Agent 日志链路分析
browser-use Agent 日志链路分析 本节详细梳理 browser-use Agent 的日志输出,从 Agent 初始化到每一步的行为日志,帮助理解其行为轨迹。 1. Agent 初始化阶段 日志点: logger.info(🧠 Starting a browser-use agent ...) 记录 …...

Qwen3高效微调
高效微调 场景、模型、数据、算力 高效微调的应用场景 对话风格微调:高效微调可以用于根据特定需求调整模型的对话风格。例如,针对客服系统、虚拟助理等场景,模型可以通过微调来适应不同的 语气、礼貌程度 或 回答方式,从而在与…...