解决nginx启动后进程存在但访问不到的问题

问题

今天访问服务器的页面,发现访问不到。

分析****过程

端口不通

想起之前是操作过nginx的升级,但升级完后服务是一直开着的。所以不太明白为啥访问不到。

然后在本地ping和telnet,发现能ping通,但telnet不通。

那就是端口不通,端口有问题了。

但想了下,这台服务器基本是没操作过什么防火墙或者端口设置之类的,所以还是要上机器看看情况。

进程存在但端口没被占用

通过ps命令查看,确实存在进程信息。

但遗留了nginx旧版本的进程信息,而且现在又不能访问。

所以干脆把所有nginx进程都删了。

// 查看进程信息
ps -ef | grep nginx

// 单个删除
kill -9 pid

// 全部删除
kill -9 $(ps aux | grep 'nginx' | grep -v grep | tr -s ' '| cut -d ' ' -f 2)

都删除后,就想想通过systemctl命令来启动,结果执行后等了一段时间,然后就报超时的错误了。

image-20230822103051477

网上查询了下,没找到原因。

systemctl启动不了,那就通过nginx自己命令来启动。

去到nginx目录,然后通过./sbin/nginx来启动。

发现nginx启动后,通过ps命令是能看到进行信息的。

image-20230822103110062

但通过lsof命令查看80端口有没被占用,确实是没看到任何信息。

而且还是可以通过nginx来停止。执行停止命令后,是看不到进程信息的。

image-20230822103135253

那就比较奇怪了。

nginx自己的命令能启动和停止,但却不能查询到端口被占用的信息,而且systemctl命令也报超时错误。

去繁从简

折腾了好一会,还是没找到问题所在。毕竟nginx底层知识欠缺,所以只能去繁从简。

去掉软链,把配置文件拷贝到当前版本目录下来启动试试。

之前升级版本《nginx版本升级详解》后,在新版本1.22.0版本目录下的nginx.conf配置文件,是通过软链连接到之前的/etc/nginx目录下的配置文件。

该目录的配置文件,是升级之前的1.12.2版本使用的配置文件。

image-20230822103208351

所以删掉了软链,以及把/etc/nginx下的配置文件拷贝到1.22.0版本目录下,并删掉/usr/sbin/下的nginx文件。

/usr/sbin/nginx文件只是快捷方式而已,当初升级版本的时候,也做了软链,连接到新版本的/sbin/nginx下。

再到1.22.0版本下执行启动命令,然后再通过lsof命令查看80端口,这时候就能看到端口占用信息了。

// 删除软链
rm -rf nginx.conf

// 删掉/usr/sbin/nginx文件
rm -f /usr/sbin/nginx

// 到1.22.0目录下创建conf.d目录
cd /usr/local/nginx-1.22.0/
mkdir conf.d

// 拷贝
cp /etc/nginx/conf.d/wordpress.conf /usr/local/nginx-1.22.0/conf.d/
cp /etc/nginx/nginx.conf /usr/local/nginx-1.22.0/conf/

在启动nginx后,是能看到80端口信息的。

只是执行nginx -v查看版本信息失败而已。这个查询不到,是因为/usr/sbin/nginx文件不存在而已。可以把新版本的nginx文件拷贝过去或者软链过去就行。

image-20230822103425542

温馨提示

想在/usr/sbin/下面加上nginx,以便执行nginx -v能看到当前的版本信息。

那可以通过软链来实现。

// 源文件记得是全路径,不然会闪动有问题
ln -sf /usr/local/nginx-1.22.0/sbin/nginx /usr/sbin/nginx

可以查看版本信息了。

image-20230822103506870

此时也能通过systemctl来启动了。

image-20230822103525071

结论

当解决问题比较久了还是没有进展,那可以试试从头来过的方法。

这样可以去掉遗留等问题引发的各种千丝万缕的关系。

所以,另一种类似的简单方法是,再安装一个nginx。

posted @ 2023-08-22 10:36  寻梦99  阅读(2452)  评论(0)    收藏  举报