V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
jack778
V2EX  ›  Linux

内网应用需访问外网 Webscoket 如何正向代理的问题

  •  
  •   jack778 · 2023-07-26 10:55:17 +08:00 · 1536 次点击
    这是一个创建于 511 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我现在碰到这样一个问题:

    • 运行环境
      • 服务器
        • A 服务器
          • 只能访问局域网
          • 用于部署 WEB 应用
        • B 服务器
          • 可以访问互联网
          • 用于做 A 服务器的外网访问正向代理
      • 客户端
        • 只能访问 A 服务器的 WEB 应用
    • 网络访问路径: 客户端(内网)->A 服务器(内网)->B 服务器(可访问外网)
    • 问题
      • 客户端需要在 A 服务器上的 WEB 应用中与网易云信的 IM 服务器建立 webscoket 连接
      • 因为 A 服务器无法访问外网, 所以 A 服务器要通过 B 服务器转发该 Webscoket(Wss)请求

    请问有哪些简单的解决方案, 主要是 A 服务器如何转发 Webscoket 请求给 B 服务器,B 服务器通过扫码方式代理该请求? 目前有两个方案 1. A 服务器改 hosts 文件, 然后 B 服务器开端口转发, 不过貌似要占用 443 端口 2. A 服务器和 B 服务器都装 nginx, 双重反向代理 请问各位有没有更加优雅简单的方法?

    12 条回复    2023-07-26 16:48:40 +08:00
    julyclyde
        1
    julyclyde  
       2023-07-26 12:31:20 +08:00   ❤️ 1
    先把拼写弄正确!!
    jack778
        2
    jack778  
    OP
       2023-07-26 12:38:04 +08:00
    @julyclyde 请问哪里拼写错了,没看出来
    zmqking
        3
    zmqking  
       2023-07-26 12:42:31 +08:00 via iPhone   ❤️ 1
    websocket
    ysc3839
        4
    ysc3839  
       2023-07-26 13:04:34 +08:00 via Android
    B 服务器端口转发用非 443 端口也可以吧
    Nazz
        5
    Nazz  
       2023-07-26 13:36:13 +08:00   ❤️ 1
    在 B 服务器部署 socks5 就行了
    march1993
        6
    march1993  
       2023-07-26 14:12:41 +08:00
    通过 Service Worker API ?无感代理外网请求
    lsk569937453
        7
    lsk569937453  
       2023-07-26 14:16:45 +08:00
    就 B 装一个 Nginx ,A 发请求到 B 的 Nginx 就完事了。
    tin3w5
        8
    tin3w5  
       2023-07-26 14:24:41 +08:00
    既然是正向代理,那就直接 Squid 。
    abear
        9
    abear  
       2023-07-26 14:29:12 +08:00
    5,7 楼说得对
    jack778
        10
    jack778  
    OP
       2023-07-26 14:54:46 +08:00
    @Nazz A 服务器上是用 nginx 接收客户端请求的,请问如何让 B 服务器代理 A 服务器的 websocket 请求呢, A 服务器要怎么配置?
    Nazz
        11
    Nazz  
       2023-07-26 15:24:16 +08:00
    @jack778 首先在 B 服务器部署 socks5 server, 然后找一个支持代理的 websocket client. 如果是 go 语言, 可以用我写的这个 https://github.com/lxzan/gws
    jifengg
        12
    jifengg  
       2023-07-26 16:48:40 +08:00   ❤️ 1
    看你最后的描述,你是知道怎么转发的,只是问有没有更优雅的方法。

    首先确定,客户端能不能访问 B 服务器?如果能,那 A 的 web 应用里,配置 ws 地址为 B 服务器的 ws 地址,让客户端直接连 B ,B 连网易。A 就不用再转一次 ws 了。这里要解决一个跨域问题就行了。
    如果不能,那就只能 客户端->A->B->网易 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3890 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:14 · PVG 08:14 · LAX 16:14 · JFK 19:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.