摘要:反向代理簡單解釋,用戶訪問頁面,由轉(zhuǎn)接,轉(zhuǎn)到服務(wù)器端的內(nèi)部開放端口不對外。
剛接觸的一個涉及實時通信的h5項目,前期開發(fā)沒遇到什么大問題,在pc端chrome調(diào)試都一切正常,用手機訪問頁面時,卻出現(xiàn)了一個問題,node啟動服務(wù)的命令行界面并沒有打印出用戶訪問頁面的信息,也就是說手機端的頁面沒有連接到websocket服務(wù),且本地計算機和手機是連的是同一個wifi,也就是說網(wǎng)絡(luò)環(huán)境相同,那為何會造成本地調(diào)試可行,而手機訪問又不能連接websocket服務(wù)呢?
在網(wǎng)上查找的各種資料,其實基本都與此問題無關(guān),
最后突然想起前段時間做過的一個python項目,在linux搭建的環(huán)境為gunicorn+python+nginx , 而gunicorn充當?shù)木褪且粋€啟動python環(huán)境的角色,而gunicorn訪問的是localhost+端口,再利用nginx做反向代理,這個項目非常類似,于是我想到了做nginx反向代理。
nginx反向代理簡單解釋,用戶訪問頁面,由nginx轉(zhuǎn)接,轉(zhuǎn)到服務(wù)器端的內(nèi)部開放端口(不對外)。
問題原因:
手機端進入頁面時訪問的是內(nèi)網(wǎng)ip,這時nginx能識別內(nèi)網(wǎng)ip,并轉(zhuǎn)到對應(yīng)的項目上,但是頁面js調(diào)用的socket= io("ws://內(nèi)網(wǎng)ip:3000"),并不能直接訪問websocket,會先轉(zhuǎn)到nginx,再由nginx來訪問websocket服務(wù),websocket所開放的端口,相當于內(nèi)部端口,并不能對外訪問
解決辦法:
修改html的js,var socket = io("ws://內(nèi)網(wǎng)ip:81"); 這里的81并不是websocket的訪問端口,而是nginx的訪問端口
做反向代理(配置如下)
map $http_upgrade $connection_upgrade {
default upgrade; "" close; } upstream websocket { server localhost:3000; # 這里是websocket的訪問端口 } server { server_name 192.168.33.174; # 這里是內(nèi)網(wǎng)端口 listen 81; location / { proxy_pass http://websocket; proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } }
配上wsServer.js
var app = require("http").createServer()var io = require("socket.io")(app);
app.listen(3000); // websocket訪問的端口
var amount = 0
index.html
var socket = io("ws://192.168.33.174:81"); // 內(nèi)網(wǎng)ip+端口加粗文字
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/105415.html
摘要:一些調(diào)試工具說起手機端調(diào)試,相比大家都不陌生。能對手機進行遠程調(diào)試,能操作,打印輸出等。通過使用實現(xiàn)本地與遠程調(diào)試器的通信。安裝各種虛擬機在電腦上進行手機調(diào)試。服務(wù)端接收到手機發(fā)來的消息,把消息廣播給所有客戶端。 一些調(diào)試工具 說起手機端調(diào)試,相比大家都不陌生。 由于手機瀏覽器沒有像PC端瀏覽器一樣有開發(fā)調(diào)試工具,所以一般手機端的調(diào)試都要借助于電腦,現(xiàn)在的調(diào)試方式通常有以下幾種。 直...
摘要:中微信內(nèi)置瀏覽器還不支持我堅信不久的將來就會支持,但在中能夠完美支持。因此本項目選擇了微信公眾號為切入點,通過檢測引導(dǎo)用戶在中打開頁面。為了便于傳輸可將其處理成字符串,另一端接收時還原并用對應(yīng)的構(gòu)造函數(shù)構(gòu)造對應(yīng)的實例即可。 前言 前段時間一直在忙一個基于WebRTC的PC和移動端雙向視頻的項目。第一次接觸webRTC,難免遇到了許多問題,比如:webRTC移動端兼容性檢測,如何配置Me...
摘要:前言作為一個消息代理客戶端與服務(wù)端的通信時基于協(xié)議的而現(xiàn)在的主流應(yīng)用時呈現(xiàn)在瀏覽器中這意味著用戶與服務(wù)端只能通過或者這類瀏覽器能理解的協(xié)議傳輸所以后端還要建立一個代理層將協(xié)議傳輸?shù)膬?nèi)容解析一下以協(xié)議發(fā)送到最后再由發(fā)送到硬件端在瀏覽器支持的協(xié) 前言 mosquitto 作為一個消息代理, 客戶端與 mosquitto 服務(wù)端的通信時基于 MQTT 協(xié)議的, 而現(xiàn)在的主流 web 應(yīng)用時呈...
摘要:前言作為一個消息代理客戶端與服務(wù)端的通信時基于協(xié)議的而現(xiàn)在的主流應(yīng)用時呈現(xiàn)在瀏覽器中這意味著用戶與服務(wù)端只能通過或者這類瀏覽器能理解的協(xié)議傳輸所以后端還要建立一個代理層將協(xié)議傳輸?shù)膬?nèi)容解析一下以協(xié)議發(fā)送到最后再由發(fā)送到硬件端在瀏覽器支持的協(xié) 前言 mosquitto 作為一個消息代理, 客戶端與 mosquitto 服務(wù)端的通信時基于 MQTT 協(xié)議的, 而現(xiàn)在的主流 web 應(yīng)用時呈...
閱讀 1581·2021-11-16 11:44
閱讀 7422·2021-09-22 15:00
閱讀 4462·2021-09-02 10:20
閱讀 1944·2021-08-27 16:20
閱讀 2385·2019-08-26 14:00
閱讀 2904·2019-08-26 11:44
閱讀 1626·2019-08-23 18:33
閱讀 1853·2019-08-22 17:28