让前端飞

nginx报错处理:bind<> to 0.0.0.80 fai

2020-07-22  本文已影响0人  前端辉羽

今天在启动项目的时候,发现无法正常访问,经过排查,锁定是nginx的问题,虽然通过cmd使用start nginx指令不会报错,但是当运行nginx -s stop指令的时候,发现了error信息:

error截图.png
这个报错信息表示nginx并没有启动,运行nginx指令进一步排查
emerg.png
这次我们又发现了一个emerg:
nginx: [emerg] bind<> to 0.0.0:80 failed <10013: An attempt was made to access a socket in a way forbidden by its access permissions
根据这个错误信息显示,是本地电脑的80端口被占用了,导致nginx无法正常启动。
问题出现的原因找到了,接下来的思路就很清晰了:
1.找出来究竟是谁占用了80端口
2.干掉它

首先打开cmd,注意:为了防止不必要的错误,这时候请直接用管理员的身份打开。
运行指令
netstat -ano
这个指令会罗列出当前所有端口的占用情况,并显示出每占用端口的进程的PID,

端口占用情况.png
我这台电脑显示,80端口被一个PID为4的进程占用着。
接下来使用指令
taskkill /pid 4
(请根据自己的情况把4替换成自己电脑上显示的进程的PID),结果如下:
运行结果示意图.png
好吧,如果没能成功,但这个提示还是非常人性化的,根据提示,使用
taskkill /F /pid 4再次尝试:
运行结果示意图.png
强制删除竟然都不行了,进行到这里,貌似已经被这个问题卡住了。
在网络上搜索了很多解决方法,基本都和上面所讲的一样,对我现在的情况来说都已经证明无效了
网上有一种解决办法是改变nginx的运行端口,但是此时我们是要去解决问题,而不是逃避问题,所以此种方案pass掉。
kill进程的方法除了cmd,还可以通过使用任务管理器。
打开任务管理器,选择进程,会有PID一列,如果没有的话,点击工具栏中的“查看”=>“选择列”,然后把PID勾选上就可以了。
此时我们看到PID为4的进程名称为system
任务管理器.png
我们在这一行右键,点击“结束进程”,发现竟然还是没有效果,这真是我遇到过最坚挺的进程了。
去网上搜索之后,system进程是系统服务进程,系统服务都会由这个进程来启动。了解到是http的系统服务,先尝试在dos中搜索services.msc查看系统服务,没有找到对应的名称,于是再去cmd中尝试关闭一下http看看
net stop http
停止http.png
经过对话和等待,界面显示HTTP服务已成功停止
接下来我们使用指令来单独看看80端口是否还有进程
netstat -ano | findstr 0.0.0.0:80
再通过netstat -ano查看一下端口列表,再三确认,都看不到80端口的占用情况,接下来start nginx,并且使用nginx查看:
nginx.png
这次也没有报错信息了。
再次启动项目,一切正常。
上一篇 下一篇

猜你喜欢

热点阅读