Rails 求教:怎么在本地通过代理打开不能直连的服务器的连接呢?

wy406 · 2019年11月05日 · 最后由 wy406 回复于 2019年11月12日 · 3353 次阅读

有一个需求是这样的:本地可以访问 A 站点,A 站点能访问 B 服务器,B 服务器的一个链接要在本地打开的 A 站点的页面上打开。其中 B 服务器的链接是动态的,这样有什么好的解决方案吗?

我猜你说的是 反向代理?

  1. 可以通过 ssh -L 连上 A,把 B 的站点的端口(比如 80 或者 443,看你 B 服务器的链接背后是什么端口)代理到本地 3000 端口。
    • 比如 B 域名是 b.com,B 服务器的链接的端口是 80,则$ ssh -L 3000:b.com:80 a_user@a_host
  2. 如果 B 服务器链接是域名解析到 IP 的,需要修改 hosts 文件把 B 服务器域名指向 localhost。
  3. nginx 添加配置,监听 80(或者其他,还是看你服务器链接背后的端口),对 B 服务器域名代理到本地 3000 端口。
jicheng1014 回复

感谢帮助!我一直认为这个是正向代理才能做到,看来我的方向可能就是错了的

tinyfeng 回复

我们这里是这样的,就是 A 服务器上发送一个 http 请求到 B 服务器,B 服务器返回一个 B 服务器的 url 给 A 服务器,然后 A 服务器获取到 B 服务器给的 url 后展示在 A 服务器的前台,然后本地打开前台的这个链接。而且本地和 B 服务器实际上是不通的。 还有几点:

  1. 本地、A 服务器、B 服务器全都是 ip 的形式的,没有域名。
  2. B 的 ip 地址是动态的,并且 B 返回的端口也是动态的。
  3. 用的还是 apache 服务器
wy406 回复

那是可以做到的,ssh 连接其实就是以 A 作为一个跳板,可以让你在本地,通过本地端口能访问 B。

如果没有域名解析,则可以通过 ip 映射,把 B 的 ip 映射到本地 127.0.0.1,后面是一样的

tinyfeng 回复

那这样还得在本地搞一个服务器,做映射啊!实际上本地就是一个个的后台管理员的机器,这个估计没法实现的。 还有就是其实从 B 服务器返回的链接是 novnc 的链接,我们的目的实际上是在本地可以打开 B 服务器的 novnc 页面,去在 B 服务器的 novnc 页面上输入命令去做各种操作的。而且 novnc 用的又是 websocket。 我目前通过在网上查教程以及看到你们的回复后我想出一个方法:是在 A 服务器上的 apache 上配置一个 http 和 websocket 的反向代理,把 B 服务器返回的链接拼接到 A 服务器的一个地址,然后这个地址在本地打开的时候走 A 服务器的反向代理到 B 服务器上,这样就能联通了。请教下,不知道这个方案是否可行

需要 登录 后方可回复, 如果你还没有账号请 注册新账号