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。

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