解决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命令来启动,结果执行后等了一段时间,然后就报超时的错误了。

网上查询了下,没找到原因。
systemctl启动不了,那就通过nginx自己命令来启动。
去到nginx目录,然后通过./sbin/nginx来启动。
发现nginx启动后,通过ps命令是能看到进行信息的。

但通过lsof命令查看80端口有没被占用,确实是没看到任何信息。
而且还是可以通过nginx来停止。执行停止命令后,是看不到进程信息的。

那就比较奇怪了。
nginx自己的命令能启动和停止,但却不能查询到端口被占用的信息,而且systemctl命令也报超时错误。
去繁从简
折腾了好一会,还是没找到问题所在。毕竟nginx底层知识欠缺,所以只能去繁从简。
去掉软链,把配置文件拷贝到当前版本目录下来启动试试。
之前升级版本《nginx版本升级详解》后,在新版本1.22.0版本目录下的nginx.conf配置文件,是通过软链连接到之前的/etc/nginx目录下的配置文件。
该目录的配置文件,是升级之前的1.12.2版本使用的配置文件。

所以删掉了软链,以及把/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文件拷贝过去或者软链过去就行。

温馨提示
想在/usr/sbin/下面加上nginx,以便执行nginx -v能看到当前的版本信息。
那可以通过软链来实现。
// 源文件记得是全路径,不然会闪动有问题
ln -sf /usr/local/nginx-1.22.0/sbin/nginx /usr/sbin/nginx
可以查看版本信息了。

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

结论
当解决问题比较久了还是没有进展,那可以试试从头来过的方法。
这样可以去掉遗留等问题引发的各种千丝万缕的关系。
所以,另一种类似的简单方法是,再安装一个nginx。
浙公网安备 33010602011771号