首页 > 解决方案 > 从 Node child_process 执行 Argo Tunnel 时出现错误 1016

问题描述

来自节点 child_process 的 Cloudflare Argo 隧道

我有一个电子应用程序,我想从中生成一个执行的子进程

cloudflared tunnel --url localhost:3000

在某个目录中。从该目录中的 cmd 执行此操作会按预期实例化 argo 隧道,并且 url 在进程运行时有效。这就是我从电子应用程序执行命令的方式:

const { spawn } = require('child_process')

let tunnel = spawn('cloudflared', ['tunnel', '--url', 'localhost:4000'], {
  stdio: 'inherit', // Will use process .stdout, .stdin, .stderr
  cwd: 'c://cloudflare'
})

我可以看到来自 cloudflare 的正常控制台输出,表明隧道已建立,并且我的服务器正在 some-random-name.trycloudflare.com 上响应。但是,当从电子应用程序中启动该过程时,我在 cloudflare 错误页面上显示错误 1016。

有没有人有使用 Argo Tunnel 和 child_process 的经验?

标签: javascriptnode.jselectronlocalhostcloudflare

解决方案


我能够让您的设置在我的 Mac 上正常运行,因此您需要进一步了解设置的详细信息。这是我所做的:

  1. 从 GitHub安装Electron Fiddle v0.9.0
  2. 通过with 安装cloudflared版本 2019.8.4homebrew
    brew install cloudflare/cloudflare/cloudflared
    
  3. 从命令行(终端窗口),运行
    cloudflared tunnel --url localhost:3000
    
    cloudflared有一些抱怨:
    • 无法确定默认配置路径。[~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /usr/local/etc/cloudflared /etc/cloudflared] 中没有文件 [config.yml config.yaml]

    • 从 shell 运行时 cloudflared 不会自动更新

    • 无法连接到源错误="获取http://localhost:3000 : dial tcp [::1]:3000: connect: connection denied"

  4. 在 localhost:3000 上启动了一个 Web 服务器
    python -m SimpleHTTPServer 3000
    
  5. 在我的浏览器中加载页面http://localhost:3000
  6. 又跑了
    cloudflared tunnel --url localhost:3000
    
    同样的抱怨,除了这次它能够连接:

    将隧道请求代理到http://localhost:3000

  7. 进一步的输出cloudflared表明它正在建立 4 条隧道。对于每个隧道,它输出

    +-----------------------------------------------------------+
    |  Your free tunnel has started! Visit it:                  |
    |    https://sides-universe-gym-metadata.trycloudflare.com  |
    +-----------------------------------------------------------+
    Route propagating, it may take up to 1 minute for your new route to become functional
    

    请注意,我没有更改或混淆 URL,这正是输出的内容,并且cloudflared输出相同的 URL 4 次,每个隧道一次。

  8. 我去了https://sides-universe-gym-metadata.trycloudflare.com并验证它显示的网站与我在 localhost:3000 上显示的网站相同。

  9. 我在运行它的终端窗口中cloudflared输入 退出。ctrl-c关闭需要相当长的时间,但我一直等到它退出。

  10. 我去了https://sides-universe-gym-metadata.trycloudflare.com并验证它显示错误。它显示“错误 1016”和“源 DNS 错误”。

  11. 在 Electron Fiddle 中,我选择Electron v6.0.6并使用了默认的、预安装main.jsindex.html、 和renderer.js. 在main.js,我在底部添加

    const { spawn } = require('child_process')
    
    let tunnel = spawn('cloudflared', ['tunnel', '--url', 'localhost:3000'], {
      stdio: 'inherit', // Will use process .stdout, .stdin, .stderr
      cwd: '/Users/user/development'
    })
    
    
  12. 我在 Electron Fiddle 上单击了“运行”。“你好世界!” 页面出现了。电子控制台显示来自cloudflared.
    • 再次cloudflared调出 4 个隧道,每个隧道的 URL 为https://citysearch-celebs-generator-history.trycloudflare.com
    • cloudflared然后记录:
    • cloudflared 已更新至 2019.8.4 版本

    • 新进程的PID是81076

    • 退出...

    • 指标服务器已停止

    • 我不知道为什么它从“2019.8.4”“更新”到“2019.8.4”。也许它与没有默认配置有关,也许它与 Electron Fiddle 从非标准位置运行它有关。我怀疑这是因为命令行没有包含--is-autoupdated=true.
    • 在“指标服务器停止”之后立即cloudflared开始记录其启动消息,就像以前一样。
    • 它再次启动了 4 个隧道,这次使用 URL https://gifts-jpg-treasury-correct.trycloudflare.com
    • 从启动到重新启动到最后一个稳定隧道启动所用的总时间:14 秒。
  13. 我在本地浏览器中访问了https://gifts-jpg-treasury-correct.trycloudflare.com并再次获得了我在 localhost:3000 托管的站点。
  14. 我在 Electron 中点击了“停止”。Electron 服务器停止了,但cloudflared继续运行。我仍然可以加载https://gifts-jpg-treasury-correct.trycloudflare.com/
  15. 我在 Electron 中点击了“Run”。再次cloudflared提出了4条隧道。这次它没有自动更新或重新启动。4 个新隧道都具有相同的新 URL:https ://reject-pride-built-twisted.trycloudflare.com/
  16. 我在本地浏览器中访问了https://reject-pride-built-twisted.trycloudflare.com/并再次获得了我在 localhost:3000 托管的站点。我尝试了https://gifts-jpg-treasury-correct.trycloudflare.com,它也仍然有效。

所以我无法重现你的问题。可能的问题是您可能一直在查看出现但cloudflared已更新的第一个隧道,关闭了该隧道并启动了另一个隧道。这在 Mac 上对我有用,但似乎你在 Windows 上工作,所以它可能是一些特定于 Windows 的问题。可能是您没有运行服务器,localhost:4000或者您的 Electron 应用程序无法访问C://clouflare

您需要提供更多信息,例如您的 Electron 应用程序运行的日志输出cloudflared以及有关运行的服务器的详细信息以及您设置的localhost:4000任何配置文件。cloudflared


推荐阅读