Cloudflared tunnel 的 API 路径
大家好,我是 3kmfi6hp。今天,我将带领大家一同领略 Cloudflared API 路径的奇妙之处,深入了解 Argo 隧道!首先,让我们一起探索 Cloudflared API 路径所提供的功能。
临时隧道(quicktunnel)通过 API 获取域名
启动 cloudflared tunnel 命令后,我们可以使用 Cloudflared API 的功能来获取临时隧道的域名。
请将 cloudflared 暴露的诊断信息的指标端口设置为 3001。您可以更新您的命令如下:
cloudflared tunnel --no-autoupdate --metrics localhost:3001 --url http://localhost:8180
发送一个请求到http://localhost:3001/quicktunnel
,它将返回一个响应,内容如下:
{ "hostname": "thoughts-overhead-girlfriend-selection.trycloudflare.com" }
有三种构建这些命令的方式
- 快速方式:
cloudflared tunnel --edge-ip-version auto --no-autoupdate --url http://localhost:8180
- JSON 方式:
cloudflared tunnel --edge-ip-version auto --config /root/tunnel.yml --url http://localhost:8180 run
- 令牌方式:
cloudflared tunnel --edge-ip-version auto run --token <TUNNEL_TOKEN>
Cloudflared 参数 和 环境变量
**示例:**以下命令通过将流量代理到端口8000
并禁用分块传输编码来运行mytunnel
隧道。
cloudflared tunnel --url localhost:8000 --no-chunked-encoding run mytunnel
config
edge-ip-version
edge-bind-address
autoupdate-freq
no-autoupdate
origincert
metrics
tag
retries
pidfile
protocol
logfile
loglevel
token
config
语法 | 默认值 |
---|---|
config value | ~/.cloudflared/config.yml (默认) |
指定 YAML 格式的配置文件路径。
edge-ip-version
语法 | 默认值 | 环境变量 |
---|---|---|
edge-ip-version value | auto (默认) | TUNNEL_EDGE_IP_VERSION |
指定用于在cloudflared
和 Cloudflare 全局网络之间建立连接的 IP 地址版本(IPv4 或 IPv6)。可用值为auto
、4
和6
。
auto
值依赖于主机操作系统来确定选择哪个 IP 版本。将从区域查询的 DNS 解析返回的第一个 IP 版本用作主设置。在双重 IPv6 和 IPv4 网络设置中,cloudflared
将将 IP 版本分为两个地址集,用于在连接失败的情况下进行降级。
edge-bind-address
语法 | 环境变量 |
---|---|
edge-bind-address value | TUNNEL_EDGE_BIND_ADDRESS |
指定用于在cloudflared
和 Cloudflare 全局网络之间建立连接的出站 IP 地址。
默认情况下,cloudflared
会让操作系统决定使用哪个 IP 地址。如果您有多个可用的网络接口并且想要优先使用特定接口,则此选项非常有用。
edge-bind-address
的 IP 版本将覆盖edge-ip-version
(如果提供)。例如,如果您输入一个 IPv6 源地址,cloudflared
将始终连接到 IPv6 目标。
autoupdate-freq
语法 | 默认值 |
---|---|
autoupdate-freq | 24h |
配置自动更新频率。另请参见:no-autoupdate
。
no-autoupdate
语法 | 默认值 | 环境变量 |
---|---|---|
no-autoupdate | false (默认) | NO_AUTOUPDATE |
禁用定期检查更新、使用新版本重新启动服务器。另请参见:autoupdate-freq
。重启通过生成一个连接到 Cloudflare 全局网络的新进程来执行。成功连接后,旧进程将在处理所有待处理请求后优雅地关闭。
origincert
语法 | 默认值 | 环境变量 |
---|---|---|
origincert value | ~/.cloudflared/cert.pem (默认) | TUNNEL_ORIGIN_CERT |
指定一个证书以验证隧道用于某个域的原点。使用 Cloudflare 隧道需要一个证书。您可以使用登陆命令或访问https://dash.cloudflare.com/argotunnel
来获取证书。
grace-period
语法 | 默认值 | 环境变量 |
---|---|---|
grace-period | 30s | TUNNEL_GRACE_PERIOD |
当接收到 SIGINT/SIGTERM 信号时,cloudflared
将停止接受新请求并等待正在进行的请求终止,然后关闭。等待进行中的请求将在此优雅期过期后终止,或者在收到第二个 SIGTERM/SIGINT 信号时终止。
metrics
语法 | 默认值 | 环境变量 |
---|---|---|
metrics value | localhost: | TUNNEL_METRICS |
指定用于查询使用情况指标的地址。
tag
语法 | 环境变量 |
---|---|
tag: {KEY=VALUE,...} | TUNNEL_TAG |
指定用于标识此隧道的自定义标签,格式为KEY=VALUE
。可以通过用逗号分隔它们来指定多个标签,例如KEY1=VALUE1, KEY2=VALUE2
。
retries
语法 | 默认值 | 环境变量 |
---|---|---|
retries value | 5 | TUNNEL_RETRIES |
指定连接/协议错误的最大重试次数。重试使用指数回退(默认情况下以 1、2、4、8、16 秒的间隔重试),因此不建议将此值显著增加。
pidfile
语法 | 环境变量 |
---|---|
pidfile value | TUNNEL_PIDFILE |
连接成功后,将应用程序的进程标识符(PID)写入此文件。主要用于脚本编写和服务集成。
protocol
语法 | 默认值 | 环境变量 |
---|---|---|
protocol | auto (默认) | TUNNEL_TRANSPORT_PROTOCOL |
指定用于在cloudflared
和 Cloudflare 全局网络之间建立连接的协议。 可用值为 auto
、 ws
和Warp
。
auto
值将自动选择最适合的传输协议,根据网络环境决定使用 WebSocket 还是 Warp 协议。
logfile
语法 | 环境变量 |
---|---|
logfile value | TUNNEL_LOGFILE |
将日志输出写入指定的文件路径。如果未指定日志文件路径,则日志将输出到控制台。
loglevel
语法 | 默认值 | 环境变量 |
---|---|---|
loglevel value | info | TUNNEL_LOGLEVEL |
指定日志输出级别。可用的值包括:trace
、debug
、info
、warn
、error
和 fatal
。
token
语法 | 环境变量 |
---|---|
token value | TUNNEL_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 路径示例返回请求。
/debug:
- GET 请求示例:
GET /debug
- 返回示例:
json{ "status": "success", "message": "调试信息与性能分析数据" }
- GET 请求示例:
/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
- GET 请求示例:
/healthcheck:
- GET 请求示例:
GET /healthcheck
- 返回示例:
text正常
- GET 请求示例:
/ready:
- GET 请求示例:
GET /ready
- 返回示例:
json{ "status": 503, "readyConnections": 0, "connectorId": "d9bf2413-e41b-47b4-9d36-8a30b57015eb" }
- GET 请求示例:
/quicktunnel:
- GET 请求示例:
GET /quicktunnel
- 返回示例:
json{ "hostname": "thoughts-overhead-girlfriend-selection.trycloudflare.com" }
- GET 请求示例:
/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 } } } }
- GET 请求示例:
透过这些示例返回请求,您将更清楚地了解各个 API 路径的功能,并直观地了解返回结果中的信息。
PM2 管理 Cloudflared 进程 (可选 使用 quicktunnel)
在本文的最后,我将为您介绍如何使用 PM2 管理 Cloudflared 进程。PM2 是一个进程管理工具,它可以帮助我们管理应用程序的进程,包括启动、停止、重启、删除等操作。此外,PM2 还提供了监控、日志管理、负载均衡等功能,非常适合用于生产环境。
Note: 因为 Cloudflared qucktunnel 临时隧道的特性,所以我们需要使用 PM2 的 cron_restart 功能,定时重启 Cloudflared 进程,以防止隧道域名过期,导致隧道失效。
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 生成,如有雷同,纯属巧合。