news 2026/9/12 22:31:42

Cloudflare Spectrum 配置完全指南:Origin 类型、TLS 模式与 Proxy Protocol 实战(基于 skills 仓库 cloudflare-deploy 参考文档)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cloudflare Spectrum 配置完全指南:Origin 类型、TLS 模式与 Proxy Protocol 实战(基于 skills 仓库 cloudflare-deploy 参考文档)

Cloudflare Spectrum 配置完全指南:Origin 类型、TLS 模式与 Proxy Protocol 实战(基于 skills 仓库 cloudflare-deploy 参考文档)

【免费下载链接】skillsSkills Catalog for Codex项目地址: https://gitcode.com/GitHub_Trending/skills4/skills

本文以 skills/.curated/cloudflare-deploy/references/spectrum/configuration.md 为核心骨架,系统讲解 Cloudflare Spectrum 的四大配置维度:三种 Origin 源站类型(Direct IP / CNAME / Load Balancer)、四种 TLS 模式的选择、Proxy Protocol 客户端真实 IP 透传,以及 IP 防火墙与企业版端口范围。读完本文,你将掌握使用 TypeScript SDK 与 Terraform 两种方式创建、管理 Spectrum 应用,并能根据业务协议(SSH、数据库、游戏、MQTT 等)正确选型与排障。

一、Spectrum 是什么,何时使用

在进入配置细节前,先明确适用边界。根据 spectrum/README.md 的定义:Cloudflare Spectrum 是运行在 Cloudflare 边缘节点上的全局四层(L4)反向代理,为任意 TCP 或 UDP 应用提供安全与加速,可承载 MQTT、邮件、文件传输、版本控制、游戏等协议流量,通过 Cloudflare 边缘转发来隐藏源站并抵御 DDoS 攻击。

何时使用 Spectrum:当你的协议不是 HTTP/HTTPS 时(HTTP 应使用 Cloudflare 标准代理),Spectrum 负责其余一切——SSH、游戏、数据库、MQTT、SMTP、RDP 以及自定义协议。

在 skills 仓库的 cloudflare-deploy 技能决策树(SKILL.md)中,Spectrum 被归入 "Networking & Connectivity" 分支:TCP/UDP proxy (non-HTTP) → spectrum/。这也决定了本文所有配置的出发点:为某个非 HTTP 端口创建一个 Spectrum 应用(App)

二、Origin 源站类型:三种选型与完整配置

Spectrum 应用的核心是回答"流量转发到哪"。文档给出了三种源站(Origin)类型,选型依据是源站地址的形态:静态 IP、动态主机名,还是需要高可用负载均衡。

2.1 Direct IP Origin(静态 IP 直连)

适用于单台服务器、固定静态 IP的场景。使用origin_direct指定tcp://IP:PORT格式的源站地址。

TypeScript SDK:

const app = await client.spectrum.apps.create({ zone_id: 'your-zone-id', protocol: 'tcp/22', // 对外暴露的协议与端口 dns: { type: 'CNAME', name: 'ssh.example.com' }, // 用户访问的域名 origin_direct: ['tcp://192.0.2.1:22'], // 源站静态 IP + 端口 ip_firewall: true, // 启用区域防火墙规则 tls: 'off', // SSH 自带加密,无需 TLS });

Terraform:

resource "cloudflare_spectrum_application" "ssh" { zone_id = var.zone_id protocol = "tcp/22" dns { type = "CNAME" name = "ssh.example.com" } origin_direct = ["tcp://192.0.2.1:22"] ip_firewall = true tls = "off" argo_smart_routing = true # 启用 Argo Smart Routing 降低延迟 }

要点:origin_direct是字符串数组(可配置多个 IP 做简单冗余),每个元素必须带tcp://udp://前缀;IP 使用文档中的文档网段示例(如 192.0.2.1)时,请替换为你的真实源站地址。

2.2 CNAME Origin(主机名源站)

适用于源站是主机名(hostname)而非固定 IP的场景。Spectrum 会动态解析 DNS,当源站 IP 变化时无需重建应用,典型用于数据库主节点等内部主机名。

TypeScript SDK:

const app = await client.spectrum.apps.create({ zone_id: 'your-zone-id', protocol: 'tcp/3306', dns: { type: 'CNAME', name: 'db.example.com' }, origin_dns: { name: 'db-primary.internal.example.com' }, // 源站主机名 origin_port: 3306, // 源站实际监听端口 tls: 'full', });

Terraform:

resource "cloudflare_spectrum_application" "database" { zone_id = var.zone_id protocol = "tcp/3306" dns { type = "CNAME" name = "db.example.com" } origin_dns { name = "db-primary.internal.example.com" } origin_port = 3306 tls = "full" argo_smart_routing = true }

与 Direct IP 的关键差异:CNAME Origin 使用origin_dnsorigin_port的组合,origin_port用于指定源站主机名对应的服务端口。从 api.md 的请求结构看,origin_directorigin_dnsCreateSpectrumAppRequest中均为可选字段,二者互斥——每应用只能选一种源站形态

2.3 Load Balancer Origin(负载均衡源站)

适用于高可用与故障转移(failover)场景。Spectrum 源站指向一个 Cloudflare Load Balancer 的域名,由负载均衡层完成健康检查、流量分发与自动切换。

Terraform:

resource "cloudflare_load_balancer" "game_lb" { zone_id = var.zone_id name = "game-lb.example.com" default_pool_ids = [cloudflare_load_balancer_pool.game_pool.id] } resource "cloudflare_load_balancer_pool" "game_pool" { name = "game-primary" origins { name = "game-1"; address = "192.0.2.1" } monitor = cloudflare_load_balancer_monitor.tcp_monitor.id } resource "cloudflare_load_balancer_monitor" "tcp_monitor" { type = "tcp"; port = 25565; interval = 60; timeout = 5 } resource "cloudflare_spectrum_application" "game" { zone_id = var.zone_id protocol = "tcp/25565" dns { type = "CNAME"; name = "game.example.com" } origin_dns { name = cloudflare_load_balancer.game_lb.name } # 源站指向 LB 域名 origin_port = 25565 }

该配置链由三层资源构成:cloudflare_load_balancer_monitor(TCP 健康检查,每 60s 探测一次、5s 超时)→cloudflare_load_balancer_pool(源站池 + 关联监控)→cloudflare_load_balancer(对外 LB 域名)→cloudflare_spectrum_application(Spectrum 应用)。当主源站故障时,负载均衡器自动将流量切换至池内其他可用源站。需要多源站故障转移的完整示例可参考 patterns.md 的 Multi-Origin Failover 章节,其中展示了fallback_pool_id备用池的配置方式。

三、TLS 配置:四种模式的取舍

TLS 模式决定 Spectrum 边缘与客户端、边缘与源站之间如何加密。文档给出完整对照表:

ModeDescriptionUse CaseOrigin Cert
offNo TLSNon-encrypted (SSH, gaming)No
flexibleTLS client→CF, plain CF→originTestingNo
fullTLS end-to-end, self-signed OKProductionYes (any)
strictFull + valid cert verificationMax securityYes (CA)

解读每个选项的适用前提:

  • off:完全不启用 TLS。适用于协议自身已加密的场景(如 SSH、游戏服务端自带加密的 RDP),此时不要求源站有任何证书。
  • flexible:客户端到 Cloudflare 走 TLS,Cloudflare 到源站走明文。仅建议测试环境使用,因为源站与边缘之间的链路没有加密。
  • full:端到端 TLS,但允许源站使用自签名证书,边缘不做证书有效性校验。适合源站有证书(哪怕不是 CA 签发)的生产环境。
  • strict:端到端 TLS 且强制校验源站证书有效性(必须为 CA 签发的有效证书)。用于数据库等安全敏感场景,提供最高等级保护。

配置示例(strict 模式):

const app = await client.spectrum.apps.create({ zone_id: 'your-zone-id', protocol: 'tcp/3306', dns: { type: 'CNAME', name: 'db.example.com' }, origin_direct: ['tcp://192.0.2.1:3306'], tls: 'strict', // Validates origin certificate });

排障联动:TLS 模式选错是 525 错误与握手超时的常见根因。gotchas 文档(gotchas.md)给出了对应关系——源站无 TLS 时使用full/strict会报 Connection refused(应改off或启用源站 TLS);源站为自签名证书时使用strict会报 525(应改full或更换有效证书)。诊断命令:openssl s_client -connect app.example.com:443 -showcerts

四、Proxy Protocol:透传客户端真实 IP

Spectrum 边缘转发会改变连接来源,导致源站日志中看到的都是 Cloudflare IP。启用Proxy Protocol可将真实客户端 IP 透传给源站,前提是源站必须支持解析对应协议版本。

版本对照表:

VersionProtocolUse Case
off-Origin doesn't need client IP
v1TCPMost TCP apps (SSH, databases)
v2TCPHigh-performance TCP
simpleUDPUDP applications

兼容性说明:

  • v1:HAProxy、nginx、SSH、大多数数据库均支持,覆盖面最广;
  • v2:二进制格式、性能更高,要求 HAProxy 1.5+、nginx 1.11+;
  • simple:Cloudflare 专有的 UDP 格式。

在 Spectrum 应用中启用:

const app = await client.spectrum.apps.create({ // ... proxy_protocol: 'v1', // Origin must parse PROXY header });

源站侧 nginx 配置(TCP 流代理):

stream { server { listen 22 proxy_protocol; proxy_pass backend:22; } }

对应 HAProxy 的写法是bind :22 accept-proxy。从 patterns.md 的游戏服务器示例可以看到proxy_protocol: 'v1'用于保留玩家真实 IP,以便实现基于 IP 的封禁与统计;而 gotchas 文档强调,如果应用行为异常,应先用proxy_protocol: 'off'验证,再确认源站确实支持所选版本。

五、IP Access Rules:区域防火墙联动

Spectrum 应用可通过ip_firewall开关接入Zone 级别的防火墙规则(IP 访问规则),实现"仅允许指定 IP/国家访问某端口"的访问控制。

const app = await client.spectrum.apps.create({ // ... ip_firewall: true, // Applies zone firewall rules });

配置流程分两步:① 在 Spectrum 应用中开启ip_firewall: true;② 在 Zone 层面配置对应的防火墙规则(白名单/黑名单)。这一能力对 SSH(见 patterns.md 的 SSH 保护示例)与 RDP(文档明确标注ip_firewall = trueREQUIRED)等高危端口尤为重要——RDP 是 DDoS 与暴力破解的重点目标,务必配合 Zone 防火墙白名单使用。

六、Port Ranges:企业版端口范围

Pro/Business 套餐只支持选定端口,而企业版(Enterprise)支持 1-65535 全部 TCP/UDP 端口以及端口范围。端口范围配置通过protocolorigin_port的起止区间联合声明:

resource "cloudflare_spectrum_application" "game_cluster" { zone_id = var.zone_id protocol = "tcp/25565-25575" # 对外端口段 dns { type = "CNAME" name = "games.example.com" } origin_direct = ["tcp://192.0.2.1"] # 源站不写端口 origin_port { start = 25565 end = 25575 # 源站端口段 } }

注意两个细节:protocol中的端口段与origin_port{ start, end }区间是成对出现的;origin_direct中只写源站 IP(不带端口),端口由origin_port块统一指定。从 api.md 的CreateSpectrumAppRequest结构可知,origin_port字段本身支持两种形态:number(单端口)或{ start: number; end: number }(端口区间),这与企业版功能严格对应。

七、配置参数速查:请求结构与完整字段

综合 api.md 的CreateSpectrumAppRequest,Spectrum 应用的可配置字段如下,便于对照上文各节:

interface CreateSpectrumAppRequest { protocol: string; // "tcp/22", "udp/53"(企业版可含端口范围) dns: { type: "CNAME" | "ADDRESS"; name: string; // "ssh.example.com" }; origin_direct?: string[]; // ["tcp://192.0.2.1:22"] origin_dns?: { name: string }; // {"name": "origin.example.com"} origin_port?: number | { start: number; end: number }; proxy_protocol?: "off" | "v1" | "v2" | "simple"; ip_firewall?: boolean; tls?: "off" | "flexible" | "full" | "strict"; edge_ips?: { type: "dynamic" | "static"; connectivity: "all" | "ipv4" | "ipv6"; }; traffic_type?: "direct" | "http" | "https"; argo_smart_routing?: boolean; }

其中edge_ips.connectivity用于处理 IPv6 连通性问题(all双栈为默认、要求源站同时支持 IPv4/IPv6;源站无 IPv6 时选ipv4),traffic_type声明流量类型,argo_smart_routing控制 Argo 智能路由加速。完整的 REST API 端点(GET/POST/PUT/DELETE /zones/{zone_id}/spectrum/apps及三条 analytics 端点)与 Python、Go SDK 示例,均可直接查阅 api.md。

八、Go 实战示例与进一步阅读

除了 TypeScript SDK 与 Terraform,Spectrum 同样支持 Go SDK。以下创建应用的示例取自 api.md:

import "github.com/cloudflare/cloudflare-go" api, _ := cloudflare.NewWithAPIToken("your-api-token") // Create app, _ := api.CreateSpectrumApplication(ctx, "zone-id", cloudflare.SpectrumApplication{ Protocol: "tcp/22", DNS: cloudflare.SpectrumApplicationDNS{Type: "CNAME", Name: "ssh.example.com"}, OriginDirect: []string{"tcp://192.0.2.1:22"}, IPFirewall: true, ArgoSmartRouting: true, }) // List apps, _ := api.SpectrumApplications(ctx, "zone-id") // Delete _ = api.DeleteSpectrumApplication(ctx, "zone-id", app.ID)

推荐阅读顺序(与 spectrum/README.md 一致):

  1. 先按协议查看 patterns.md(SSH、Minecraft、MQTT、SMTP、MySQL/PostgreSQL、RDP 六大场景的完整配置与安全要求);
  2. 再按源站形态回到本文选择 Origin 类型;
  3. 上线前务必阅读 gotchas.md,重点核对连接超时、客户端 IP 显示为 Cloudflare IP、TLS 错误、SMTP 反向 DNS、分析数据保留期与各套餐配额限制;
  4. 程序化访问参考 api.md。

此外,Spectrum 所在的 cloudflare-deploy 技能还覆盖了完整的 IaC 生态:通用 Terraform 资源模板见 terraform/configuration.md,Pulumi 参考见 pulumi/configuration.md,REST 通用接口见 api/api.md。

【免费下载链接】skillsSkills Catalog for Codex项目地址: https://gitcode.com/GitHub_Trending/skills4/skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 22:30:34

Landsat遥感影像CNN地物分类实战:从预处理到精度评价

简介:针对CNN深度学习遥感影像地物分类任务,这套Landsat数据处理Python源码基于PyTorch框架实现,面向遥感、地信与人工智能相关专业的学生、教师和科研人员,旨在解决从原始遥感影像到地物分类结果的完整流程问题。压缩包内共10个文…

作者头像 李华
网站建设 2026/9/12 22:30:32

LeetCode交替和问题解析与优化技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 22:28:42

ThinkPHP5图书管理系统Demo源码解析与实战部署

简介:这是一套基于ThinkPHP5开发的轻量级图书管理系统Demo源码,面向PHP初学者与Web全栈入门者,帮助快速掌握MVC架构、前后端交互及常见业务功能实现。项目采用ThinkPHP5作为后端框架,EasyUI构建后台管理界面,Bootstrap…

作者头像 李华
网站建设 2026/9/12 22:22:38

Java开发者转型大模型学习指南与实践

1. Java开发者转型大模型学习的必要性作为拥有多年Java开发经验的程序员,我深刻理解转型学习大模型技术的重要性和挑战。Java生态以其稳定性、跨平台特性和完善的工具链著称,而大模型技术则代表了当前AI领域最前沿的发展方向。这两者的结合将为开发者打开…

作者头像 李华
网站建设 2026/9/12 22:22:06

从RAG到Agent:向量数据湖与上下文工程的技术演进

1. 从RAG到Agent:技术演进的必然路径RAG(检索增强生成)技术在过去两年已经成为大模型应用的标准配置,但当我们把视角拉长到AI Agent的发展轨迹上,就会发现传统RAG架构正在面临根本性的挑战。我在实际企业级AI系统部署中…

作者头像 李华