VUE 项目中接入websocket时需要ip端口动态部署
最近项目上到测试环境的时发现websocket总是连接失败,本地启动都没有问题。查了一下问题发现前端项目接入websocket时ip和端口写死了。这样当然是不行的。接下来直接上解决方案吧。
websocket的连接url为:ws://ip:port/websocket/test 为例。
为了方便部署时不需要修改代码,项目中接入的时候肯定是不能写入具体ip和端口的,这个时候我们可以像处理接口一样让每个环境的ip:port与浏览器访问的ip:port一致,然后通过nginx动态代理到我们指定的ip端口上去。
1、前端代码修改
var generateEndpoint = function (socketURI) {
if (socketURI.includes("ws")) {
return socketURI;
} else {
return `${location.protocol === 'https' ? 'wss' : 'ws'}://${location.host}` + socketURI;
}
};
2、nginx 动态代理
# WebSocket 服务
location /websocket {
proxy_pass http://真实websocket服务的ip:端口;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
即可。这样每次部署时都根据nginx代理到正确url了.
|