网站首页 > 技术文章 正文
前言
为什么要代理 WebSocket?
是这样的,因为我们有个基于 electron 的桌面应用,他在本地提供 http 和 websocket 两个服务,客户端(浏览器)可以使用这些服务来完成一些核心业务需要。
问题是,目前该应用只支持 windows 平台,虽然生产环境对环境有所要求,但部分开发却是 mac 电脑,无法安装该客户端,总不能要求开发者安装个虚拟机,或者尽快开发个 mac 版,无论硬件还是软件,搭建开发环境的成本都太高。
于是设想在一台 windows 电脑上共享桌面应用服务,在测试环境做请求代理,以便持有 mac 或者安装应用有问题的同学进行无障碍快速接入。
这篇就讲下如何配置 webpack 和 nginx 来完成这样的“小工程”。
架构设计
下图主要示意了如下几个方面:
- 桌面服务被安装在可用的 windows 机器上
- 开发环境通过配置 webpack 进行请求转发
- 对于 mac 平台及不适配的情况,统一通过 nginx 进行请求转发
跨平台 socket 代理策略
webpack-dev-server
项目基于 vue-cli,首先需要对 vue.config.js 中 webpack 的代理部分进行修改。
先设置 VUE_APP_PROXY_URL,定义目标转发环境的(IP)地址,再添加 VUE_APP_PROXY_PLATFORM 决定是否开启转发功能。
# env.local
VUE_APP_PROXY_PLATFORM = mac
VUE_APP_PROXY_URL = 192.168.1.x:81
// vue.config.js
var proxy = {
// 后端服务
['/api']: {
target: process.env.VUE_PROXY_API,
},
};
if (VUE_APP_PROXY_PLATFORM == 'mac') {
proxy = Object.assign(proxy, {
// 桌面应用 http 服务
['/app-api']: {
target: 'http://' + process.env.VUE_APP_PROXY_URL,
},
// 桌面应用 websocket 服务
['/app-ws']: {
target: 'ws://' + process.env.VUE_APP_PROXY_URL,
ws: true, //开启 websocket 支持
pathRewrite: {
'^/app-ws': '/',
},
},
});
}
module.exports = {
// ...
devServer: {
host: '0.0.0.0',
port: port,
open: true,
proxy: proxy,
},
};
接下来只要在业务代码中,添加对应 /app** 前缀来匹配代理规则即可。
nginx
nginx 端配置简单,只需要对协议进行升级即可:
server {
listen 81;
# http 代理
location /app-api/ {
proxy_pass http://192.168.1.y:18455/;
}
# websocket 代理
location / {
proxy_pass http://192.168.1.y:18455/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
最后
本文主要记录我在遇到这个问题时,实施的解决方案,但不具备通用性。不过也希望为有遇到类似场景问题的同学提供一个方向的解决思路。
猜你喜欢
- 2025-06-13 Linux 上利用Nginx代理uWSGI处理Flask web应用
- 2025-06-13 如何隐藏代理器服务地址?企业级IP匿名化与反追踪技术
- 2025-06-13 宝塔面板使用Nginx反向代理解决跨域问题
- 2025-06-13 海尔集团武汉中心总经理孙梁君——以智慧家电 升级品质生活
- 2025-06-13 给小白的 Nginx 10分钟入门指南(nginx入门教程)
- 2025-06-13 反向代理以及其使用场景(反向代理啥意思)
- 2025-06-13 Vue炼金术:解锁前端开发的进阶之道
- 2025-06-13 93.8k Star 的内网穿透神器 frp:DIY开发者必备的反向代理
- 2025-06-13 Nginx正向代理、反向代理、负载均衡及性能优化
- 2025-06-13 深入理解跨域及常见误区揭秘(深入理解跨域及常见误区揭秘论文)
你 发表评论:
欢迎- 523℃Oracle分析函数之Lag和Lead()使用
- 520℃几个Oracle空值处理函数 oracle处理null值的函数
- 517℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 504℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 501℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 493℃【数据统计分析】详解Oracle分组函数之CUBE
- 472℃Oracle有哪些常见的函数? oracle中常用的函数
- 471℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)