如何实现 WebSocket 反向代理?(反向代理 session)
off999 2025-03-19 01:02 106 浏览 0 评论
前言
为什么要代理 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";
}
}
最后
本文主要记录我在遇到这个问题时,实施的解决方案,但不具备通用性。不过也希望为有遇到类似场景问题的同学提供一个方向的解决思路。
相关推荐
- 华硕电脑蓝屏怎么修复(华硕蓝屏怎么办)
-
华硕电脑蓝屏恢复的方法如下:安全模式进入系统。重启电脑后,连续按下F8键直至出现启动选项界面,选择安全模式进入系统,若此时能够正常运行,说明问题可能是由于软件冲突引起的。检查驱动程序兼容性。过于陈旧或...
- win10教育版怎么改成专业版(win10最稳定三个版本)
-
一、首先,点击Windows10“开始”菜单,找到电脑应用列表,二、然后,在应用列表中找到“Windows系统”文件夹中找到“命令提示符”,点击打开。三、然后,系统跳转到“命令提示符”窗口。四、然后,...
- ps下载官网(ps官网免费下载)
-
要从Adobe官网下载AdobePhotoshop(PS),可以按照以下步骤进行:1.打开网页浏览器,进入Adobe官网的主页。网址是:https://www.adobe.com。2.在网页的顶...
- 连wifi就能打电话的软件(无卡用wifi打电话)
-
我的手机是安卓2.2系统所有这里只针对Android2.2系统其他系统版本的朋友可以试一试需要一款拨号软件:PPPOE拨号软件;而拨号软件必须要获得root权限(管理权限)才能拨号;下载安装这...
- wifi优化大师下载(wifi优化软件)
-
1.设定-应用程序管理器-已下载-单击需要卸载的软件-卸载。2.点击最近应用程序键-进入任务管理器-已下载-点击""""卸载""""。3...
- 无网络单机游戏(好玩的无网络单机游戏)
-
一款能够让我们自由畅快的进行游戏的合集软件。在这个合集之中有着各种各样的单机小游戏。这些小游戏不需要联网就可以玩了,没有防沉迷系统,我们想玩多久就玩多久,合集之中小游戏的类型有很多种,有赛车类、射击类...
- 笔记本电脑推荐理由(推荐笔记本子)
-
配置落后散热出现问题是笔记本报废的主要原因因为旧电脑问题很多。一是现在新电脑价格不算贵,没必要用旧的,电脑可不兴新不如旧的说法;二是二手电脑是否大修过,是否有什么瑕疵,是否运行速度有问题,是否被人监控...
- tplink设置向导(tp link路由器的设置向导)
-
tplink路由器首次设置时才会自动弹出向导,如果希望自动弹出,可先还原出厂设置,然后再登录即可自动弹出,还原出厂设置步骤如下: 1、路由器开启电源; 2、按下路由器表面的reset复位按钮,个别...
- 破解苹果激活锁的万能id(破解iphone id激活锁软件)
-
提前打开我的AppleID界面,点击管理您的账户。点击忘记AppleID,填写与AppleID相关的各项基本信息。通过电子邮件内的链接或回答安全问题,或者进行人工破解。1、登陆苹果官网,点击下面...
- 手机上不了wifi是什么原因(手机上不了网连不了wifi)
-
1.手机wifi已连接不可上网问题出现后首先检测一下是否为手机本身突发性的问题,可以进行关机重启一下再连接看是否还会出现这样的情况。或者使用其他手机或设备连接WiFi试试能否上网。2.如果不是手机的问...
- win10有产品id没有密钥(win10 我没有产品密钥)
-
WIN10,在左下角输入WINDOWSPOWERSHELL,然后点击系统查询结果第一项,在弹出的窗口中输入:(Get-WmiObject-query‘select*fromSoftware...
- win10截屏后找不到了(win10截屏后找不到了怎么办)
-
Win10系统截屏后没有更新通知并不是一个常见的问题。可能是由于系统设置或者安装的软件造成的。如果系统设置为静音或者禁用通知,那么截屏后不会有通知。另外,一些截屏软件可能会阻止系统通知,需要手动设置...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
