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 mytunnelconfigedge-ip-versionedge-bind-addressautoupdate-freqno-autoupdateorigincertmetricstagretriespidfileprotocollogfilelogleveltoken
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 生成,如有雷同,纯属巧合。
3Kmfi6HP