0

0

解决Nginx编译冲突:多版本OpenSSL共存导致的报错排查

冷炫風刃

冷炫風刃

发布时间:2026-03-17 13:52:56

|

615人浏览过

|

来源于php中文网

原创

Nginx编译SSL错误源于多版本OpenSSL混用,需通过五步排查解决:一、确认系统OpenSSL版本及路径;二、configure时显式指定includes和libraries路径;三、屏蔽旧pkg-config缓存;四、清理残留符号链接;五、验证Makefile中路径一致性。

解决nginx编译冲突:多版本openssl共存导致的报错排查 - php中文网

如果您在编译Nginx时遇到与SSL相关的链接错误或函数未定义报错,例如“undefined reference to `SSL_CTX_set_ciphersuites`”或“SSL_library_init undeclared”,则很可能是系统中存在多个OpenSSL版本,而Nginx configure阶段误用了不兼容的头文件或库路径。以下是排查与解决此问题的具体步骤:

一、确认当前系统中安装的OpenSSL版本及路径

需明确区分系统默认OpenSSL(通常为系统包管理器安装)与手动编译安装的OpenSSL(如OpenSSL 1.1.1或3.0.x),二者头文件和库文件若混用将直接导致编译失败。

1、执行 openssl version -a 查看命令行调用的OpenSSL版本及其编译路径。

2、执行 which openssl 获取可执行文件位置,进而推断其所属安装树。

3、执行 pkg-config --modversion openssl 检查pkg-config识别的版本。

4、执行 find /usr -name "opensslv.h" 2>/dev/null

5、执行 find /usr/local -name "libssl.so*" 2>/dev/null 定位所有可能的libssl动态库路径。

二、强制指定OpenSSL头文件与库路径进行configure

Nginx configure脚本默认依赖环境变量和pkg-config结果,当多版本共存时易选错;显式传入--with-openssl和--with-openssl-opt参数无法覆盖已安装头文件路径,必须使用--with-openssl-includes和--with-openssl-libraries精准绑定。

1、假设目标OpenSSL源码位于 /opt/openssl-1.1.1w,且已执行 make install/opt/openssl-1.1.1w/install 目录。

2、进入Nginx源码目录后,运行以下configure命令:

3、./configure --with-openssl=/opt/openssl-1.1.1w/install --with-openssl-includes=/opt/openssl-1.1.1w/install/include --with-openssl-libraries=/opt/openssl-1.1.1w/install/lib

4、若仍报错,追加 --with-cc-opt="-I/opt/openssl-1.1.1w/install/include" --with-ld-opt="-L/opt/openssl-1.1.1w/install/lib -Wl,-rpath,/opt/openssl-1.1.1w/install/lib" 强制编译器与链接器优先使用指定路径。

三、屏蔽系统pkg-config缓存干扰

pkg-config会读取/usr/lib64/pkgconfig/或/usr/local/lib/pkgconfig/下的openssl.pc文件,若该文件指向旧版OpenSSL,configure将自动加载错误头文件路径,即使指定了--with-openssl也不生效。

1、执行 pkg-config --variable=includedir opensslpkg-config --variable=libdir openssl 验证当前pkg-config返回值。

ProcessOn
ProcessOn

免费在线流程图思维导图,专业强大的作图工具,支持多人实时在线协作

下载

2、临时重命名系统openssl.pc文件:sudo mv /usr/lib64/pkgconfig/openssl.pc /usr/lib64/pkgconfig/openssl.pc.bak

3、若使用自定义安装路径,生成对应openssl.pc并放入PKG_CONFIG_PATH目录:export PKG_CONFIG_PATH="/opt/openssl-1.1.1w/install/lib/pkgconfig:$PKG_CONFIG_PATH"

4、验证新pc文件是否生效:pkg-config --cflags openssl 应输出包含 -I/opt/openssl-1.1.1w/install/include 的字符串。

四、检查并清理残留的OpenSSL符号链接

某些Linux发行版(如CentOS/RHEL)在升级OpenSSL后保留/usr/include/openssl和/usr/lib64/libssl.so指向旧版本的软链接,configure阶段会优先读取这些路径,造成头文件与库版本不匹配。

1、执行 ls -l /usr/include/openssl 查看是否为指向旧版源码或安装目录的软链接。

2、执行 ls -l /usr/lib64/libssl.so* 确认动态库主链接是否指向正确版本。

3、若确认需切换至新版,备份后重建链接:sudo rm -f /usr/include/openssl && sudo ln -s /opt/openssl-1.1.1w/install/include/openssl /usr/include/openssl

4、执行 sudo rm -f /usr/lib64/libssl.so /usr/lib64/libcrypto.so && sudo ln -s /opt/openssl-1.1.1w/install/lib/libssl.so.1.1 /usr/lib64/libssl.so && sudo ln -s /opt/openssl-1.1.1w/install/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so

五、验证configure生成的Makefile中路径一致性

configure完成后,Makefile中OPENSSL_INCLUDE和OPENSSL_LIBS字段必须严格对应同一安装路径,否则编译时仍将出现符号冲突或头文件缺失。

1、打开Nginx源码目录下的Makefile文件。

2、搜索 OPENSSL_INCLUDE,确认其值为 -I/opt/openssl-1.1.1w/install/include(或您指定的实际路径)。

3、搜索 OPENSSL_LIBS,确认其包含 -L/opt/openssl-1.1.1w/install/lib 且无其他-L选项覆盖该路径。

4、检查 NGX_OBJS/src/event/ngx_event_openssl.o 编译命令行,确保gcc调用中同时出现上述-I和-L参数。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

522

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

611

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

245

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

739

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3619

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

60

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

74

2026.01.13

c++ 字符处理
c++ 字符处理

本专题整合了c++字符处理教程、字符串处理函数相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号