第 5 篇:Cloudflare Tunnel 多服务路由模板

第 5 篇:Cloudflare Tunnel 多服务路由模板

    • [1)总体原则:先规划子域,再写 ingress;先收口,再扩展](#1)总体原则:先规划子域,再写 ingress;先收口,再扩展)
    • [2)`ingress` 设计:匹配越具体越靠前,最后必须 404 兜底](#2)ingress 设计:匹配越具体越靠前,最后必须 404 兜底)
    • [3)一份可直接复制的"多服务 config.yml 母模板"(建议你直接当专栏交付物)](#3)一份可直接复制的“多服务 config.yml 母模板”(建议你直接当专栏交付物))
    • [4)最佳实践:把"路由"与"策略"分开(路由在 config,访问控制在 Cloudflare)](#4)最佳实践:把“路由”与“策略”分开(路由在 config,访问控制在 Cloudflare))
    • 5)常见坑位清单(我建议你在专栏里"强制提醒")
    • [6)本章行动项(你按这个执行,下一篇就能写 Access 策略与零信任)](#6)本章行动项(你按这个执行,下一篇就能写 Access 策略与零信任))
    • 评论区互动(我会用你们的反馈补全"母模板第二版")
    • 下一章

上一章我们讲清楚了"为什么选 Cloudflare Tunnel"。这一章进入实操:如何用一份 config.yml 做多服务路由,并把"默认 404 兜底""子域划分""最小暴露面"这三件事一次性做对。

你会发现:config.yml 写得好不好,决定了你后面做 Make Agent 工具化、灰度发布、回滚、审计------到底是"工程化"还是"手工艺"。

参考官方配置文件说明(你后续可以对照参数补全):[4]


1)总体原则:先规划子域,再写 ingress;先收口,再扩展

我强烈建议你的多服务入口按"职责"拆成 4 类子域(与你专栏体系完全对齐):

  • ComfyUIcui.example.com(内容工厂)
  • RAG APIrag.example.com(运营系统 API)
  • Dashboardops.example.com(监控/面板/管理)
  • Webhook Receiverhook.example.com(Make/外部回调入口)

这样做的好处是:策略可分层、风险可隔离、审计可追踪
用户/团队/Agent
Cloudflare Edge
cloudflared-Mac
ComfyUI :8188
RAG API :8000
Dashboard :3000/8501
Webhook :9000


2)ingress 设计:匹配越具体越靠前,最后必须 404 兜底

Cloudflare Tunnel 的 ingress自上而下匹配的。工程上最常见的事故是:

  • 你漏写默认兜底
  • 或把"宽泛规则"放在上面,把敏感服务误路由出去了

所以我给你一个硬规则:
所有 ingress 最后一条必须是 http_status:404,否则你迟早"意外暴露"。
命中 hostname
都没命中
请求到达 Tunnel
按 ingress 顺序匹配
转发到本地 service
http_status:404 兜底
响应返回


3)一份可直接复制的"多服务 config.yml 母模板"(建议你直接当专栏交付物)

说明:端口按你本地规划举例;你可以把 Dashboard 替换成 Grafana/Streamlit/自研面板的端口。

yaml 复制代码
# ~/.cloudflared/config.yml
# Cloudflare Tunnel 多服务路由模板(生产骨架)

tunnel: <TUNNEL-UUID>
credentials-file: /Users/<YOU>/.cloudflared/<TUNNEL-UUID>.json

# 建议显式声明日志与运行参数(便于排障)
loglevel: info
transport-loglevel: warn

# (可选)metrics 端口:本地观测 cloudflared 状态(只绑定本机)
metrics: 127.0.0.1:4318

# ingress 自上而下匹配,最后必须 404 兜底
ingress:
  # 1) ComfyUI(内容工厂)
  - hostname: cui.example.com
    service: http://127.0.0.1:8188
    originRequest:
      noTLSVerify: true  # 本地回环可忽略证书验证(视情况开启/关闭)

  # 2) RAG API(智能运营系统)
  - hostname: rag.example.com
    service: http://127.0.0.1:8000
    originRequest:
      httpHostHeader: rag.example.com

  # 3) Dashboard(监控/管理面板)
  - hostname: ops.example.com
    service: http://127.0.0.1:3000
    originRequest:
      httpHostHeader: ops.example.com

  # 4) Webhook Receiver(Make / 外部回调)
  - hostname: hook.example.com
    service: http://127.0.0.1:9000
    originRequest:
      httpHostHeader: hook.example.com

  # 兜底:任何未显式声明的 hostname 一律 404
  - service: http_status:404

你会注意到:我刻意把 service 都指向 127.0.0.1。原因很简单:
Tunnel 只需要在本机打通服务,不要让这些服务在局域网"随便可见"。

(你后面要做最小暴露面,这条原则很关键。)


4)最佳实践:把"路由"与"策略"分开(路由在 config,访问控制在 Cloudflare)

config.yml 负责"把请求送到哪里";访问控制(Access/WAF/Rate Limit)负责"谁能访问、怎么访问"。工程上建议这样做:

  • ops.example.com:强认证(MFA、邮箱域、设备姿态)
  • hook.example.com:Webhook 验签 + 限速(防刷)
  • rag.example.com:机器身份(服务 Token)
  • cui.example.com:通常不对公众开放(至少只给内部/团队)

用一张图把"谁访问谁"讲透,你的读者就不会乱配:
机器调用
团队/自己
公网访问者
可选:只读演示
强认证
服务身份
验签回调
访客/客户
你的设备/成员
Make / Agent
cui.example.com
ops.example.com
rag.example.com
hook.example.com


5)常见坑位清单(我建议你在专栏里"强制提醒")

  1. 忘记 404 兜底:任何未知 hostname 都可能落到最后一个 service(风险极高)
  2. 把服务绑到 0.0.0.0:导致局域网随便访问,边界失守
  3. 把 ops 与 demo 混在一起:演示时把管理面板一并公开
  4. Webhook 不验签:被人随便 POST,直接让你队列跑满
  5. Ingress 顺序写反:宽泛规则在上,精确规则被"吞掉"

6)本章行动项(你按这个执行,下一篇就能写 Access 策略与零信任)

  • 先确定 4 个子域:cui / rag / ops / hook
  • 把本地服务全部绑定到 127.0.0.1(减少内网暴露面)
  • 复制并落地 config.yml,最后一条必须 http_status:404
  • ops 规划强认证策略(下一篇讲 Access)
  • hook 预留验签与防重放(下一篇或专门一节讲)

评论区互动(我会用你们的反馈补全"母模板第二版")

  1. 你准备把 Dashboard 用 Grafana 还是 Streamlit?端口是多少?
  2. 你希望 cui 对外开放到什么程度:仅自己、团队、还是客户演示?
  3. 你的 Make 场景里 Webhook 触发更像"回调通知",还是"直接触发生产任务"?(这决定验签与限速策略的强度)

你把这三项信息回我,我可以把本章模板升级成"可直接贴进专栏交付物"的版本:包含 dev/stage/prod 三环境 、以及 灰度切流(RAG v1/v2 双端口) 的 ingress 结构。

下一章

《第 6 篇:访问控制与零信任策略》

相关推荐
Benny的老巢4 天前
Wrangler CLI 工具完整使用指南
cloudflare·workers·wrangler·cloudflare cli·cloudflare 部署
tang777895 天前
爬虫如何绕过绕过“5秒盾”Cloudflare:从浏览器指纹模拟到Rust求解之不完全指南
开发语言·爬虫·rust·cloudflare
Benny的老巢11 天前
Cloudflare Workers 实现 Resend 邮件发送接口
cloudflare·邮件服务·workers·resend服务
Benny的老巢11 天前
Cloudflare Workers 接口服务能力详解
cloudflare·服务端·workers·接口服务·d1数据库
Benny的老巢11 天前
Cloudflare Workers CORS 跨域问题排查与解决
跨域·cloudflare·cors·workers
大佐不会说日语~12 天前
使用 Cloudflare平台 + Docker + Nginx 完成网站 HTTPS 部署实战记录
nginx·docker·https·部署·cloudflare
wanfeng_0912 天前
nextjs cloudflare 踩坑日记
nextjs·cloudflare
xuchaoxin13752 个月前
cdn节点代理的副作用@fail2ban对接cdn封锁恶意请求ip@fail2ban封锁ip有效性问题
运维·网络·cdn·cloudflare
起个破名想半天了3 个月前
五秒盾解决方案之Selenium
selenium·cloudflare·反爬