vite websocket 公网 端口 连接异常问题
vite websocket 端口连接异常问题
在vite websocket 开发时,可能会遇到端口是写死的,如果公网地址或域名 跟 代码本地的端口不一致,websocket 会出现连接异常的情况
在浏览器调试中可以发现浏览器使用 ws://公网地址或域名:本地端口 或 wss://公网地址或域名:本地端口 去连服务器。
传统网络架构中,大家习惯于服务通过 防火墙 或者 代理服务器 发布出去,而且本地服务端口跟发布出去的公网地址端口往往不一致。
比如本地3000 或 24678 ,发布出去通常会用http 80 或 https 443。
关于此问题 vite 在 2021.5.29 之后的版本应该都已经解决
官方说明
详细可以参考大佬在 github 关于此 功能 or bug 的讨论和 merge 过程:
https://github.com/vitejs/vite/pull/3578
官方配置说明参考如下:
https://vitejs.dev/config/#server-hmr
关于clientport 说明
clientPort 是一个高级选项,只在客户端的情况下覆盖端口,这允许你为 websocket 提供不同的端口,而并非在客户端代码中查找。如果需要在 dev-server 情况下使用 SSL 代理,这非常有用。
当使用 server.middlewareMode 或 server.https 时,你需将 server.hmr.server 指定为你 HTTP(S) 的服务器,这将通过你的服务器来处理 HMR 的安全连接请求。这在使用自签证书或想通过网络在某端口暴露 Vite 的情况下,非常有用。
关于解决方案
升级vite,在server.hmr中添加clientport,示例如下,主要内容就是加黑加粗部分。
{ server: { host: true, port: 23456, open: true, proxy: { '/api': { target: process.env.SERVER_URL, changeOrigin: true, }, }, hrm: { clientPort: 80 } }, }
另外nginx 代理ws 或wss 需要格外添加配置,参考文章
nginx 代理 wss/ws websocket 协议
分类:
运维技术-系统
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构