問題:
服務端python websocket無法建立與外網客戶端的連接
環境:
服務器:WAMP
作業系統:WIN10
網頁前端websocket的建立使用的是JS的一個庫:reconnecting-websocket
服務端websocket用的是python的一個庫:Pywss
通過埠映射已經將內網的80埠映射到外網的37609埠上,瀏覽器可以訪問該地址,
但是,網頁始終無法建立與服務器的websocket連接...
這里前端websocket的初始化引數已經設定了外網IP和埠37609,服務端也開啟監聽0.0.0.0和埠37609。
嘗試了很多方案,希望前輩們給予除錯思路,問題出在了哪里?
已有的資訊:
1.在網路防火墻里入站規則和出站規則都加入了允許80,37609埠通信
2.Telnet外網IP加37609埠,可以連接上,顯示HTTP/1.1 200 OK ...,盡管之后會顯示遺失對主機的連接;Ping該IP也沒有問題
3.在本機除錯通信時是可以成功通信的,前端websocket引數IP設為localhost或者本機IP(局域網里的電腦也可以連接上)
4.該外網網站可以正常訪問,資料庫也可以訪問,就是無法建立與服務端的Websocket連接
5.這是網頁上的websocket除錯資訊:WebSocket connection to 'ws://4X.XX.XXX.161:37609/view_tool' failed: Error during WebSocket handshake: Unexpected response code: 404
還有網路除錯資訊圖:

PS:Apache設定過一次Require all granted,這個是否也有什么講究?
uj5u.com熱心網友回復:
問題還真出在Apache這,需要設定反向代理,但具體原理還不是很清楚。在apache的httpd.conf檔案下,載入下面兩個模塊,取消前面的#注釋
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
再在文本末添加代理設定:
<Location /view_tool>
ProxyPass ws://127.0.0.1:37609/view_tool
ProxyPassReverse wss://127.0.0.1:37609/view_tool
</Location>
127.0.0.1應該不需要修改,37609是你服務端監聽的埠,/view_tool是你的ws路徑。
現在可以連接上了,但好像連接程序不是很快,然后連接上原本會立即通知前端頁面,現在還有些延遲,實際上早已經連接上了,再研究研究。
參考文章:
通過Apache訪問WebSocket的配置方法
Apache 反向代理設定
uj5u.com熱心網友回復:
也可以在http-vhosts.conf里加代理陳述句(似乎更穩定)ProxyPass "/view_tool" "ws://127.0.0.1:37609/view_tool"
ProxyPassReverse "/view_tool" "wss://127.0.0.1:37609/view_tool"
參考--Apache配置WebSocket代理
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/28798.html
標籤:網絡通信
