Go1.12, 轻松实现 HTTPS & WSS 动态反向代理

本文介绍了如何利用Go1.12中的httputil库,特别是ReverseProxy功能,实现HTTPS和WSS的动态反向代理。首先,通过nginx进行POC验证了需求的技术可行性,然后详细讨论了使用Go语言代替nginx实现动态转发的原因,并给出了路由设置和核心代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

2019年上半年google推出的golang1.12为我们带来了很多新特性,具体请见官方 Go 1.12 Release Notes

其中有一项:

net/http/httputil
The ReverseProxy now automatically proxies WebSocket requests.

从该版本开始,httputil库中的 ReverseProxy能够自动转发 websocket请求,参见 reverseproxy.go源码
从此,无论 http(s) 或者 ws(s) 都能够通过 httputil 官方库实现,而在这之前,我们需要自己实现,或者借用一些第三方库实现,例如:https://github.com/gorilla/websockethttps://github.com/yhat/wsutil。

本文将从产品实际需求出发,对该功能予以介绍。

需求提出

公司研发的产品是一个集群产品,在集群的管理节点(头节点)中部署有我们开发的WEB服务,集群中的其它节点中部署有类VNC的远程桌面服务,用户想访问这些节点中的类VNC服务时都要通过管理节点访问。此服务使用的协议是 https 和 websocket+ssl 即 wss。
管理节点中的转发服务需要支持如下功能:

  1. 因为后端是多个节点,所以管理节点要能够根据参数动态转发请求到指定的后端节点
  2. 要同时运行 https 转发和 wss转发
  3. 要支持把该远程桌面服务以iframe的方式嵌入到管理节点的WEB页面中

简单的示意图

用户 192.168.1.100:7443
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值