V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ysmood
V2EX  ›  分享创造

分享一个内网反向代理工具,或许比 ngrok 更符合你的需要

  •  1
     
  •   ysmood ·
    ysmood · 2020-04-14 11:00:30 +08:00 · 2640 次点击
    这是一个创建于 1683 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址 https://github.com/ysmood/digto

    和普通的代理工具不同它不需要任何依赖,只要能发送 http 请求就可以在内网处理公网发来的 http 请求。协议非常简单所以可以轻松集成到任何语言而不需要引用依赖。比如调试支付服务的回调时,他们的回调请求来自公网,而我自己的开发服务是在局域网内,利用它就可以将外部请求代理到本地开发服务。相比 ngrok 之类的服务利用这个工具就可以不用常驻一个反代进程了,常驻反代也让有洁癖的人很难受,要是忘了关 ngrok,同一个端口被别的服务用了还可能泄露内部的讯息。

    由于可以方便的编程,它也比 ngrok 之类的服务更容易集成到自动化测试中。事实上这也是我们自己用的最多的方式。由于可以用我们自己熟悉的工具 log debug 打断点,有时候反而比那些那些代理工具花里胡哨的功能更便利,当然这个是仁者见仁智者见智。

    下面是一个简单的 curl 示例,这里只需要用到 curl 。

    1. 打开一个命令行,发送公网请求 curl https://my-subdomain.digto.org/path -d 'ping' ,可以看到请求开始等待返回,my-subdomain 可以为任意值

    2. 打开另一个命令行,用它发送返回值给上面这个公网请求,我们要发送两个请求,第一个用来获取 http header,第二个用来发送 response 。示例如下:

      curl -i https://digto.org/my-subdomain
      # HTTP/2 200
      # digto-method: GET
      # digto-url: /path
      # digto-id: 3dd4e560
      #
      # ping
      
      # digto-id 的值必须和上面返回的值保持一致
      curl https://digto.org/my-subdomain -H 'digto-id: 3dd4e560' -d 'pong'
      

      然后应该能看到第一个命令行收到了 pong 的返回。

    目前 digto 自己实现了 golang,ruby 和 nodejs 的 client 供做示例。

    如果你不想使用 demo 服务,也可使用源代码启动自己的私服。

    3 条回复    2020-04-15 17:00:46 +08:00
    ifyour
        1
    ifyour  
       2020-04-14 14:56:51 +08:00
    赞。👍

    文档也比较详细,star 支持!
    win7pro
        2
    win7pro  
       2020-04-15 16:12:09 +08:00
    有意思!
    BlackHole1
        3
    BlackHole1  
       2020-04-15 17:00:46 +08:00
    不错哎,已 star
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2684 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:20 · PVG 20:20 · LAX 04:20 · JFK 07:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.