当前位置: 首页 > article >正文

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_idis 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_keyis 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_freeis 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_freeis 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_DHparamsis 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_freeis 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_datais 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_exis 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_exis 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_idis 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_defaultis 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_freeis 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_freeis 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给出的解决方法,是否有效还待验证。

http://www.lryc.cn/news/2398617.html

相关文章:

  • 线程相关面试题
  • pikachu通关教程-目录遍历漏洞(../../)
  • Maven-生命周期
  • Hadoop复习(九)
  • Matlab实现LSTM-SVM回归预测,作者:机器学习之心
  • Spring Boot 自动配置原理:从入门到精通
  • 实践深度学习:构建一个简单的图像分类器
  • 腾讯 ovCompose 开源,Kuikly 鸿蒙和 Compose DSL 开源,腾讯的“双”鸿蒙方案发布
  • PYTHON调用讯飞C/C++动态库实现离线语音合成并且实时播放
  • 黑马Java面试笔记之 消息中间件篇(RabbitMQ)
  • Vue中安装插件的方式
  • 如何提高工作效率
  • Redisson学习专栏(五):源码阅读及Redisson的Netty通信层设计
  • Spring AI 项目实战(一):Spring AI 核心模块入门
  • 字节跳动开源图标库:2000+图标一键换肤的魔法
  • 结合 AI 生成 mermaid、plantuml 等图表
  • 行列式详解:从定义到应用
  • R语言使用随机过采样(Random Oversampling)平衡数据集
  • HertzBeat的安装和使用教程
  • 【Kotlin】高阶函数Lambda内联函数
  • 从0开始学vue:vue3和vue2的关系
  • MySQL关系型数据库学习
  • 嵌入式硬件篇---龙芯2k1000串口
  • 4-C#的不同窗口传值
  • 谷歌地图苹果版v6.138.2 - 前端工具导航
  • NSSCTF [LitCTF 2025]test_your_nc
  • 第十九章 正则表达式
  • browser-use Agent 日志链路分析
  • Qwen3高效微调
  • Gitee Wiki:重塑关键领域软件研发的知识管理范式