MENU

記一次virtualizor面板novnc的websocket鏈接返回502狀態碼的解決

最近從小伙伴哪裡白嫖到一台有特殊加成服務器,於是準備開點vps出售,經過一番思想鬥爭之後選擇了virtualizor然後遇到了這個問題,google和官方論壇也沒有解決方法,無奈只能自己想辦法,折騰2天終於找到了問題.

問題表現

問題很明顯,開啟master settings裡面的novnc四個選項,並且正確設置ssl證書並重啟機器之後仍然無法使用novnc,使用chrome右鍵裡的檢查,切換到network選項卡可以看到ws鏈接返回502的狀態碼.
请输入图片描述
请输入图片描述

解決過程

出現此問題後先從google進行搜索,找到了幾篇和novnc有關的文章,但是裡面情況不同,並且嘗試了其中幾個解決方法均無效,然後我通過virtualizor文章找到了nginx配置文件路徑(因為狀態碼為502所以我判斷問題是反向代理沒有正確被配置導致的),然後查看了配置文件發現ws鏈接url的反代信息,信息表明其實際地址為127.0.0.1:4081,然後通過lsof -i:4081查看端口監聽狀態,但是發現端口未被監聽,然後我通過find / -name novnc*來嘗試尋找novnc程式的配置文件,但是找出來了一些不相關的文件(實際上已經找到了,但是按照預想的方式,novnc程序應該是一直開啟的,所以我將正確的路徑忽略了),問題一時陷入僵局.
之後詢問使用同樣面板的小伙伴,他訴我他也無法正常使用vnc.
於是我便去了官方論壇的支持板塊發帖求助,但是沒人為我解答(實際上他們的論壇非常不活躍),就這樣1天過去了.
第二天的早上我起床去廁所大便,大便後回來繼續研究這個問題,這個時候我突然想到昨天在官方論壇看到的一個帖子,這個帖子中的解決方法引起了我的注意,帖子中的解決命令如下

kill $(pgrep -f "/usr/local/virtualizor/enduser/themes/default/novnc/utils/websockify")

仔細閱讀這條命令後我發現這是殺死websockify進程的命令,於是我查看了這個程式的目錄,發現裡面除了這個程式還有幾個py文件,然後我嘗試直接執行這個程式,然後它提示沒有在ENV裡找到python程式,然後我突然想到,novnc實際上不是一個常駐內存的程式,當我們在virtualizor面板點擊novnc的時候,php會通過exec之類的函數來運行websockify然後配合nginx預先設置好的反向代理來達到novnc操控vps的目的,這樣一想也就能解釋之前為什麼我搜不到novnc的任何配置文件的原因和為什麼ws鏈接返回502以及為什麼4081端口未被監聽的原因了,因為機器沒有安裝python所以websockify直接退出了.
知道這點之後於是立即安裝python來驗證這個判斷是否正確

apt update &&  apt install python -y

安裝之後嘗試手動執行websockify之後發現返回了未傳遞參數的錯誤,然後去virtualizor面板點擊novnc之後發現novnc的ws鏈接返回正確101狀態碼並且顯示vps的tty畫面,此時問題解決,大功告成.

之後我去官方論壇將回复自己的帖子,並講述了解決方法以及指出virtualizor安裝程式沒有安裝缺少的python問題,但幾天過去到現在還沒有官方人員回复(或許他們已經懶的看他們的官方論壇了).

最后编辑于: 2019 年 06 月 11 日
996.icu 996.icu