内网应用需访问外网 Webscoket 如何正向代理的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
jack778
V2EX    Linux

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

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

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

    • 运行环境
      • 服务器
        • 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     Solana     5213 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:17 PVG 15:17 LAX 23:17 JFK 02:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86