Skip to content
On this page

Cloudflared tunnel 的 API 路径

大家好,我是 3kmfi6hp。今天,我将带领大家一同领略 Cloudflared API 路径的奇妙之处,深入了解 Argo 隧道!首先,让我们一起探索 Cloudflared API 路径所提供的功能。

临时隧道(quicktunnel)通过 API 获取域名

启动 cloudflared tunnel 命令后,我们可以使用 Cloudflared API 的功能来获取临时隧道的域名。

请将 cloudflared 暴露的诊断信息的指标端口设置为 3001。您可以更新您的命令如下:

bash
cloudflared tunnel --no-autoupdate --metrics localhost:3001 --url http://localhost:8180

发送一个请求到http://localhost:3001/quicktunnel,它将返回一个响应,内容如下:

json
{ "hostname": "thoughts-overhead-girlfriend-selection.trycloudflare.com" }

有三种构建这些命令的方式

  1. 快速方式:cloudflared tunnel --edge-ip-version auto --no-autoupdate --url http://localhost:8180
  2. JSON 方式:cloudflared tunnel --edge-ip-version auto --config /root/tunnel.yml --url http://localhost:8180 run
  3. 令牌方式:cloudflared tunnel --edge-ip-version auto run --token <TUNNEL_TOKEN>

Cloudflared 参数 和 环境变量

**示例:**以下命令通过将流量代理到端口8000并禁用分块传输编码来运行mytunnel隧道。

txt
cloudflared tunnel --url localhost:8000 --no-chunked-encoding run mytunnel

config

语法默认值
config value~/.cloudflared/config.yml (默认)

指定 YAML 格式的配置文件路径。

edge-ip-version

语法默认值环境变量
edge-ip-version valueauto(默认)TUNNEL_EDGE_IP_VERSION

指定用于在cloudflared和 Cloudflare 全局网络之间建立连接的 IP 地址版本(IPv4 或 IPv6)。可用值为auto46

auto 值依赖于主机操作系统来确定选择哪个 IP 版本。将从区域查询的 DNS 解析返回的第一个 IP 版本用作主设置。在双重 IPv6 和 IPv4 网络设置中,cloudflared将将 IP 版本分为两个地址集,用于在连接失败的情况下进行降级。

edge-bind-address

语法环境变量
edge-bind-address valueTUNNEL_EDGE_BIND_ADDRESS

指定用于在cloudflared和 Cloudflare 全局网络之间建立连接的出站 IP 地址。

默认情况下,cloudflared会让操作系统决定使用哪个 IP 地址。如果您有多个可用的网络接口并且想要优先使用特定接口,则此选项非常有用。

edge-bind-address的 IP 版本将覆盖edge-ip-version(如果提供)。例如,如果您输入一个 IPv6 源地址,cloudflared将始终连接到 IPv6 目标。

autoupdate-freq

语法默认值
autoupdate-freq24h

配置自动更新频率。另请参见:no-autoupdate

no-autoupdate

语法默认值环境变量
no-autoupdatefalse(默认)NO_AUTOUPDATE

禁用定期检查更新、使用新版本重新启动服务器。另请参见:autoupdate-freq。重启通过生成一个连接到 Cloudflare 全局网络的新进程来执行。成功连接后,旧进程将在处理所有待处理请求后优雅地关闭。

origincert

语法默认值环境变量
origincert value~/.cloudflared/cert.pem (默认)TUNNEL_ORIGIN_CERT

指定一个证书以验证隧道用于某个域的原点。使用 Cloudflare 隧道需要一个证书。您可以使用登陆命令或访问https://dash.cloudflare.com/argotunnel来获取证书。

grace-period

语法默认值环境变量
grace-period30sTUNNEL_GRACE_PERIOD

当接收到 SIGINT/SIGTERM 信号时,cloudflared将停止接受新请求并等待正在进行的请求终止,然后关闭。等待进行中的请求将在此优雅期过期后终止,或者在收到第二个 SIGTERM/SIGINT 信号时终止。

metrics

语法默认值环境变量
metrics valuelocalhost:TUNNEL_METRICS

指定用于查询使用情况指标的地址。

tag

语法环境变量
tag: {KEY=VALUE,...}TUNNEL_TAG

指定用于标识此隧道的自定义标签,格式为KEY=VALUE。可以通过用逗号分隔它们来指定多个标签,例如KEY1=VALUE1, KEY2=VALUE2

retries

语法默认值环境变量
retries value5TUNNEL_RETRIES

指定连接/协议错误的最大重试次数。重试使用指数回退(默认情况下以 1、2、4、8、16 秒的间隔重试),因此不建议将此值显著增加。

pidfile

语法环境变量
pidfile valueTUNNEL_PIDFILE

连接成功后,将应用程序的进程标识符(PID)写入此文件。主要用于脚本编写和服务集成。

protocol

语法默认值环境变量
protocolauto(默认)TUNNEL_TRANSPORT_PROTOCOL

指定用于在cloudflared和 Cloudflare 全局网络之间建立连接的协议。 可用值为 autowsWarp

auto 值将自动选择最适合的传输协议,根据网络环境决定使用 WebSocket 还是 Warp 协议。

logfile

语法环境变量
logfile valueTUNNEL_LOGFILE

将日志输出写入指定的文件路径。如果未指定日志文件路径,则日志将输出到控制台。

loglevel

语法默认值环境变量
loglevel valueinfoTUNNEL_LOGLEVEL

指定日志输出级别。可用的值包括:tracedebuginfowarnerrorfatal

token

语法环境变量
token valueTUNNEL_TOKEN

隧道的验证令牌,用于授权与 Cloudflare 之间的通信。执行cloudflared login命令后,将在$HOME/.cloudflared/token文件中生成一个令牌。

通过 API 获取隧道配置

Cloudflared API 路径功能一览:

参考代码:https://github.com/cloudflare/cloudflared/blob/master/metrics/metrics.go

API 路径功能
/debug呈现性能分析工具
/metrics提供 Prometheus 指标
/healthcheck验证 Cloudflared 运行状态是否正常
/ready验证隧道是否连接到边缘节点,并返回连接器 ID
/quicktunnel迅速创建隧道
/config返回远程管理的隧道配置信息
  • /debug:呈现性能分析工具,帮助我们了解 Cloudflared 的运行情况。如果您对性能优化感兴趣,可使用此路径获取更多信息。

  • /metrics:提供 Prometheus 指标,用于监测 Cloudflared 进程的各项指标。若您有数据分析和监测的需求,此路径将为您提供宝贵信息。

  • /healthcheck:验证 Cloudflared 是否正常运行,将返回标准的"200 OK"响应。此路径用于确保 Cloudflared 正常工作。

  • /ready:验证隧道是否与边缘节点建立连接,并返回连接器 ID,使我们能够更好地了解隧道状态。此路径有助于确认隧道的连通性。

  • /quicktunnel:迅速创建一个隧道,非常方便实用!只需简单操作,即可快速建立一个隧道。

  • /config:返回远程管理的隧道配置信息,以 JSON 格式呈现。通过此路径,我们能轻松了解隧道配置。

透过 API 路径介绍,我们进一步认识到它们在 Cloudflared 和 Argo 隧道中的重要性。无论是性能优化、数据分析,还是隧道配置,这些路径都提供了关键的功能和信息。


当然,让我们继续深入了解这些 Cloudflared API 路径的奇妙之处。下面,我将为您呈现每个 API 路径示例返回请求。

  1. /debug:

    • GET 请求示例:GET /debug
    • 返回示例:
    json
    {
      "status": "success",
      "message": "调试信息与性能分析数据"
    }
  2. /metrics:

    • GET 请求示例:GET /metrics
    • 返回示例:
    text
    # TYPE cloudflared_requests_total 计数器
    cloudflared_requests_total{path="/metrics", method="GET"} 1
    # TYPE cloudflared_response_time 仪表
    cloudflared_response_time{path="/metrics", method="GET"} 0.5
  3. /healthcheck:

    • GET 请求示例:GET /healthcheck
    • 返回示例:
    text
    正常
  4. /ready:

    • GET 请求示例:GET /ready
    • 返回示例:
    json
    {
      "status": 503,
      "readyConnections": 0,
      "connectorId": "d9bf2413-e41b-47b4-9d36-8a30b57015eb"
    }
  5. /quicktunnel:

    • GET 请求示例:GET /quicktunnel
    • 返回示例:
    json
    { "hostname": "thoughts-overhead-girlfriend-selection.trycloudflare.com" }
  6. /config:

    • GET 请求示例:GET /config
    • 返回示例:
    json
    {
      "version": -1,
      "config": {
        "ingress": [
          {
            "hostname": "",
            "path": null,
            "service": "http://127.0.0.1:7860",
            "Handlers": null,
            "originRequest": {
              "connectTimeout": 30,
              "tlsTimeout": 10,
              "tcpKeepAlive": 30,
              "noHappyEyeballs": false,
              "keepAliveTimeout": 90,
              "keepAliveConnections": 100,
              "httpHostHeader": "",
              "originServerName": "",
              "caPool": "",
              "noTLSVerify": false,
              "disableChunkedEncoding": false,
              "bastionMode": false,
              "proxyAddress": "127.0.0.1",
              "proxyPort": 0,
              "proxyType": "",
              "ipRules": null,
              "http2Origin": false,
              "access": { "teamName": "", "audTag": null }
            }
          }
        ],
        "warp-routing": { "enabled": false },
        "originRequest": {
          "connectTimeout": 30,
          "tlsTimeout": 10,
          "tcpKeepAlive": 30,
          "noHappyEyeballs": false,
          "keepAliveTimeout": 90,
          "keepAliveConnections": 100,
          "httpHostHeader": "",
          "originServerName": "",
          "caPool": "",
          "noTLSVerify": false,
          "disableChunkedEncoding": false,
          "bastionMode": false,
          "proxyAddress": "127.0.0.1",
          "proxyPort": 0,
          "proxyType": "",
          "ipRules": null,
          "http2Origin": false,
          "access": { "teamName": "", "audTag": null }
        }
      }
    }

透过这些示例返回请求,您将更清楚地了解各个 API 路径的功能,并直观地了解返回结果中的信息。

PM2 管理 Cloudflared 进程 (可选 使用 quicktunnel)

在本文的最后,我将为您介绍如何使用 PM2 管理 Cloudflared 进程。PM2 是一个进程管理工具,它可以帮助我们管理应用程序的进程,包括启动、停止、重启、删除等操作。此外,PM2 还提供了监控、日志管理、负载均衡等功能,非常适合用于生产环境。

Note: 因为 Cloudflared qucktunnel 临时隧道的特性,所以我们需要使用 PM2 的 cron_restart 功能,定时重启 Cloudflared 进程,以防止隧道域名过期,导致隧道失效。

js
module.exports = {
  apps: [
    {
      name: "cloudflared",
      script: "cloudflared",
      args: "tunnel --no-autoupdate --metrics 127.0.0.1:3001 --url http://127.0.0.1:7860 > /dev/null 2>&1",
      autorestart: true,
      restart_delay: 1000,
      corn_restart: "30 */1 * * *",
      out_file: "NULL",
      error_file: "NULL",
    },
    {
      name: "nodejs-proxy",
      script: "nodejs-proxy",
      args: `-p 7860 -u ${process.env.UUID} > /dev/null 2>&1`,
      autorestart: true,
      restart_delay: 500,
      env: {
        PORT: 7860,
      },
      out_file: "NULL",
      error_file: "NULL",
    },
  ],
};

希望这次的文章能让您对 Cloudflared API 有更深入的理解!若您有其他问题或需要更多信息,请随时向我们 ChatGPT 提问。感谢您的阅读!

用到的工具

Note: 本文由 GPT-4 生成,如有雷同,纯属巧合。

上次更新于: