Ubuntu 22.04编译Nginx时因OpenSSL 3.0弃用API报错的解决方案咨询
Hey there, let's figure out how to fix that OpenSSL 3.0 deprecation error you're running into when compiling Nginx 1.18.0 on Ubuntu 22.04. Here are a few solid solutions you can try right away:
升级Nginx到兼容OpenSSL 3.0的版本
Nginx 1.18.0是比较旧的稳定版,它的代码还依赖OpenSSL 3.0已经弃用的ENGINE相关API。最彻底的解决办法是切换到Nginx 1.20.x及以上版本(比如当前的稳定版1.24.x),这些新版本已经针对OpenSSL 3.0做了适配,编译时不会再出现这个报错。你可以获取对应新版本的源码包,调整configure参数后重新编译即可。忽略弃用API的编译警告(不升级版本的临时方案)
如果暂时无法升级Nginx,你可以修改configure命令中的--with-cc-opt参数,添加-Wno-error=deprecated-declarations,告诉编译器不要把这个弃用警告当作错误处理。修改后的该参数部分如下:--with-cc-opt='-g -O2 -ffile-prefix-map=/build/nginx-zctdR4/nginx-1.18.0=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2 -Wno-error=deprecated-declarations'运行更新后的configure命令,再执行make,编译器就会跳过这个错误继续完成编译。
指定编译时使用OpenSSL 1.1.x版本
Ubuntu 22.04默认搭载OpenSSL 3.0,但你可以安装旧版OpenSSL 1.1.x的开发库,让Nginx编译时使用这个版本。首先安装依赖包:sudo apt-get install libssl1.1 libssl-dev=1.1.1n-0ubuntu1.10然后在configure命令中添加
--with-openssl=/path/to/openssl-1.1.x(替换为你的OpenSSL 1.1.x安装路径,如果是系统包安装,可能无需额外指定路径)。不过这个方法可能会引发后续的依赖冲突风险,优先级不如升级Nginx。
个人更推荐第一个方案——升级到新版Nginx稳定版,既能解决当前报错,还能获得最新的安全补丁和功能更新。
备注:内容来源于stack exchange,提问作者konstantinos Dms

