关于一次升级Nginx时遇到的问题及解决

2022/9/15 5:18:31

本文主要是介绍关于一次升级Nginx时遇到的问题及解决,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题描述

因需求,需升级xxx.xxx.xxx.126服务器中的Nginx。
可行的操作包括:

  1. 使用可信的第三方RPM包更新Nginx
  2. 使用官方提供的Nginx源码进行编译并安装

很不幸,个人选择的是第二种方法。
在使用源码包中的configure检查环境时,发现该本地服务器中并无GCC等C语言编译器,遂尝试RPM安装GCC及其依赖。
在使用rpm命令,后缀--force --nodeps参数升级Glibc至2.28后,执行rpm命令与yum命令均报'GLIBC_2.14 not found'
因缺少C编译器,无法通过编译旧版本Glibc源码回滚;又因rpm命令和yum命令均依赖Glibc而无法执行,问题严重了起来……

处理Glibc升级崩溃导致的报错'GLIBC_2.14 not found'

根据报错

rpm: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /lib64/libgcc_s.so.1)

可考虑大约是动态链接库方面存在问题,但只根据一台设备无法精确定位问题,故参考了相近配置的另一台服务器xxx.xxx.xxx.125,查询得差别如下:

xxx.xxx.xxx.126的相关信息

[root@**** lib64]# ls -la | grep libgcc
-rwxr-xr-x   1 root root   93224 4月  30 2012 libgcc_s-4.4.6-20120305.so.1
-rwxr-xr-x   1 root root   99672 11月 13 02:32 libgcc_s-8-20210514.so.1
lrwxrwxrwx   1 root root      24 1月  29 19:11 libgcc_s.so.1 -> libgcc_s-8-20210514.so.1

xxx.xxx.xxx.125的相关信息

[root@**** lib64]# ls -la | grep libgcc
-rwxr-xr-x.  1 root root   93320 Nov 22  2013 libgcc_s-4.4.7-20120601.so.1
lrwxrwxrwx.  1 root root      28 Feb  6  2018 libgcc_s.so.1 -> libgcc_s-4.4.7-20120601.so.1

观察得libgcc_s.so.1软链的目标有异。好在mv、cp等命令仍可正常使用,尝试备份原so文件后,将libgcc_s.so.1重链至libgcc_s-4.4.6-20120305.so.1。
经测试,重链后各命令均可正常调用。故判定故障原因为:在升级Glibc时中途崩溃,导致软链已被修改但指向的地址内文件不完整、无法正常调用。

升级Nginx

使用rpm包升级相近版本的Nginx

自nginx官方镜像仓库http://nginx.org/packages下载适用于 Red Hat 6 的版本相近的升级包,即文件夹中的 nginx-1.18.0-2.el6.ngx.x86_64.rpm。
使用如下命令安装该包。

rpm -hiv nginx-1.18.0-2.el6.ngx.x86_64.rpm

得到反馈:

warning: nginx-1.18.0-2.el6.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing...                ########################################### [100%]
getent: relocation error: getent: symbol __libc_dynarray_resize, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
getent: relocation error: getent: symbol __libc_dynarray_resize, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
1:nginx                  ########################################### [100%]
----------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
* http://nginx.org/en/support.html

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

----------------------------------------------------------------------

使用以下命令确认已升级至该版本。

nginx -v

修改引用参数并重启应用

在调用了Nginx服务的配置文件中可见:

home='pwd'
sbin/nginx -c ****/nginx.conf -p $home

将其引用的nginx路径修改为新版本所在的路径,仍旧引用之前的配置文件,即:

home='pwd'
nginx -c ****/nginx.conf -p $home

重启应用,见Nginx版本已更新。

后记

参考文章

https://blog.51cto.com/meiling/3937697 —— CentOS下安装nginx rpm包
https://blog.csdn.net/ex_xyz/article/details/116199551 —— nginx启动和配置

对以上文章的作者致以感谢。

感想

  1. 为什么这台Red Hat 6里没有GCC!?
  2. 尽量不要--force --nodeps(即--强制安装 --不检查依赖),否则后果无法估计。
  3. 尽量别升级Glibc等底层库。


这篇关于关于一次升级Nginx时遇到的问题及解决的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程