Nginx1.17.9的一个bug(Pls ignore this archieve WITHOUT socket programming)

最近发现nginx1.17.9的一个bug。使用nginx.exe成功启动后,启动某U网络代理加速软件,发现nginx服务器下的网页资源无法访问。通过命令关闭重启nginx服务器,或关闭网络代理,均没有解决问题。

1)nginx.exe 和 nginx.exe -s stop/quit执行无显示错误。

2)查看nginx根目录logs下的error.log文件:

2020/03/27 00:26:32 [alert] 2652#9736: accept() failed (10022: An invalid argument was supplied)

3)通过命令查看操作系统的端口占用 没有发现异常。启动nginx前,没发现服务器端口被占用。

这种情况一般考虑是nginx服务器启动出现异常或端口被占用。从第一点来看,nginx启动关闭正常。从第一、三点似乎可以排除端口被占用的缘故。第二点似乎是socket连接异常。

为了排除是端口冲突问题造成的异常,开启一个Apache服务器软件进行测试。

Apache和nginx服务器均设置默认服务端口为80。先启动apache服务器。确认无误后,命令启动nginx服务器,发现没有提示错误。命令关闭nginx服务器出现错误提示。

命令启动和关闭nginx服务器

这种错误提示一般可能有两种情况:1)执行命令的目录不一致;2)启动异常或没有启动。这里从上面图示看出可以排除1)。

现在查看nginx根目录的logs下的error.log文件提示。

nginx根目录的logs/error.log

“bind() to 0.0.0.0:80 failed”说明绑定本地端口80失败,也即是端口被占用的情况。而现实错误提示是“accept() failed”,与正常的端口被占用异常信息不一致。稍有经验的程序员可能会接触socket accept() failed的情况。

从上述信息可以看出,这是一个与端口占用类似、未知原因的bug。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章