解决Ubuntu20.04通过apt重装Nginx后配置文件消失


问题背景

前几天服务器由于某v2升级出现了一些问题导致整个系统被我越修越坏的事我不想再提了,总之就是因为这个事情小木屋中心服务器又双叒叕重装了一次系统。

不过毕竟难得重装一次系统,就想着顺便把之前看见的某Nginx的Google反代模块安装上,结果安装过程不知道哪一步出了问题,于是我就 sudo find / -name nginx 把能删的东西删了个遍(注:这个模块需要编译安装所以Nginx是野编译来的),然后用 apt-get 重装了一下nginx,但是安装之后运行nginx一直报 nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)

排障过程

首先,遇到这种问题我们肯定先考虑是配置文件残留,先进行一次 sudo apt-get remove --purge nginx 把Nginx卸载掉,然后sudo find / -name nginx 把能删的东西全部删个遍,确保没有文件残留,然后 sudo apt-get install nginx 重装完事。

不出意外的话,就要出意外了。在进行完以上操作之后,执行nginx指令发现 nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 并未消除,使用 sudo find / -name nginx.conf -type d 搜索后发现系统中没有该文件存在。

那么问题还会出在哪里呢?会不会是Nginx的依赖未卸载导致的问题呢?再次使用 sudo apt-get remove --purge nginx 对Nginx进行卸载,再执行 sudo apt-get autoremove 卸载未卸载的Nginx依赖程序,重新安装Nginx之后发现 nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 并未消除。

这就很神奇了啊朋友们,对配置和依赖都进行清除之后重装居然还是缺少文件,看来问题不是出现在配置文件和依赖程序上了。那么我们还有什么办法呢?

解决方案

在检索资料后,我发现可以用dpkg查找和Nginx有关的程序,于是执行了 sudo dpkg --get-selections|grep nginx 指令,查找系统中和Nginx有关的程序,其中有一个程序 nginx-common 疑似和该问题存在关联,执行 sudo apt-get remove --purge nginx-common 将该程序进行卸载,重新执行 sudo apt-get install nginx,发现问题解决。

问题总结

在对apt包库进行检索后,发现了这么一段描述 This package contains base configuration files used by all versions of nginx.,可以判断问题就是由此包产生。由于卸载Nginx时未卸载该包,重新安装后未能正确释放配置文件至指定文件夹导致问题出现。

参考资料

软件包:nginx-common(1.22.0-3.1) - Debian
nginx配置失败,卸载后重装无 nginx.conf文件 - haojuntu