socket io连接到vpc中的私有ip/私有子网
socket io connect to private ip / private subnet in vpc
我的目标是通过 socket io 从我的 public 服务器连接到我的私人服务器
const socket = io("10.0.2.50:3001")
两者都连接到我的 vpc。私人服务器有我的应用程序的 socket/server 代码,public 服务器显示前端。我希望用户能够 link to/connect 到私有子网上的其他私有服务器。
我有一个基本的 aws vpc 设置 -
- vpc with public 和私有子网
- 一台服务器连接到 public 子网,该子网通过 public 路由 table 和互联网网关连接到 public 互联网。这是 运行 @ public ip x.x.x.x:3000 私有 ip 10.0.1.50:3000
- 一个私人服务器,我可以通过私人路由 table 从我的 public 服务器 10.0.2.50:3001
什么在起作用 -
- 我可以访问面向 public 的服务器并看到加载了前端资产,但它永远无法连接。
- 当我在 public 服务器中 sshed 时,我可以 curl 私人服务器 - curl 10.0.2.50:3001。
- 我可以在 public ip 上连接到私人服务器的 public 克隆。这确认代码是正确的连接。
const socket = io("x.x.x.x:3001")
- 如果我设置 nginx 反向 proxy_pass = http:10.0.2.50:3001;它有效,我有一个用于调试服务器端代码的测试页面设置
- 我已经测试了 socket io cors 文档中提到的 cors - curl "http://10.0.2.50:3001/socket.io/?EIO=4&transport=polling" 并且它给出了预期的结果。为了进行测试,我在私人服务器上附加了一个开放的 cors 政策。
- 我已将我的安全设置设为非常开放以供测试。他们中的大多数都开放了入站和出站。
我的感觉是在 vpc 中连接到私有服务器是一个套接字 io 限制,但我不确定为什么会这样,并且很好奇是否有解决方法。
提前致谢
"My feeling is that connecting to a private server in a vpc is a
socket io limitation"
不,这就是网络的运作方式。您的 front-end 代码在笔记本电脑的网络浏览器中运行,而不是在 VPC 中运行。您的笔记本电脑不在 VPC 内。您的笔记本电脑只能连接到您 VPC 中的 public 资源,无法连接到您 VPC 中的私有资源。这就是 public 和私有 VPC 资源的定义。
要在 public Internet 上的网络浏览器和您的 back-end 服务器之间建立 Socket.IO 连接,这些服务器必须位于 public 子网中并且具有 public IP 地址,或者流量必须通过 public 服务器或 public 负载平衡器进行代理。
我的目标是通过 socket io 从我的 public 服务器连接到我的私人服务器
const socket = io("10.0.2.50:3001")
两者都连接到我的 vpc。私人服务器有我的应用程序的 socket/server 代码,public 服务器显示前端。我希望用户能够 link to/connect 到私有子网上的其他私有服务器。
我有一个基本的 aws vpc 设置 -
- vpc with public 和私有子网
- 一台服务器连接到 public 子网,该子网通过 public 路由 table 和互联网网关连接到 public 互联网。这是 运行 @ public ip x.x.x.x:3000 私有 ip 10.0.1.50:3000
- 一个私人服务器,我可以通过私人路由 table 从我的 public 服务器 10.0.2.50:3001
什么在起作用 -
- 我可以访问面向 public 的服务器并看到加载了前端资产,但它永远无法连接。
- 当我在 public 服务器中 sshed 时,我可以 curl 私人服务器 - curl 10.0.2.50:3001。
- 我可以在 public ip 上连接到私人服务器的 public 克隆。这确认代码是正确的连接。
const socket = io("x.x.x.x:3001")
- 如果我设置 nginx 反向 proxy_pass = http:10.0.2.50:3001;它有效,我有一个用于调试服务器端代码的测试页面设置
- 我已经测试了 socket io cors 文档中提到的 cors - curl "http://10.0.2.50:3001/socket.io/?EIO=4&transport=polling" 并且它给出了预期的结果。为了进行测试,我在私人服务器上附加了一个开放的 cors 政策。
- 我已将我的安全设置设为非常开放以供测试。他们中的大多数都开放了入站和出站。
我的感觉是在 vpc 中连接到私有服务器是一个套接字 io 限制,但我不确定为什么会这样,并且很好奇是否有解决方法。
提前致谢
"My feeling is that connecting to a private server in a vpc is a socket io limitation"
不,这就是网络的运作方式。您的 front-end 代码在笔记本电脑的网络浏览器中运行,而不是在 VPC 中运行。您的笔记本电脑不在 VPC 内。您的笔记本电脑只能连接到您 VPC 中的 public 资源,无法连接到您 VPC 中的私有资源。这就是 public 和私有 VPC 资源的定义。
要在 public Internet 上的网络浏览器和您的 back-end 服务器之间建立 Socket.IO 连接,这些服务器必须位于 public 子网中并且具有 public IP 地址,或者流量必须通过 public 服务器或 public 负载平衡器进行代理。