news 2026/6/16 17:59:30

Cloudflare Tunnel 路径转发踩坑与三种解决方案(免费vs收费)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cloudflare Tunnel 路径转发踩坑与三种解决方案(免费vs收费)

先说一下我踩坑的问题

CF Tunnel 的 ingress 规则里,path匹配会把完整路径透传给后端。

配置长这样:

ingress:-hostname:mydomain.compath:/appPathservice:http://localhost:8080

访问https://mydomain.com/appPath时,后端 Flask 收到的路径是/appPath,不是/。但 Flask 路由只写了@app.route('/'),直接 404。

这个问题不是个例。我的每个项目路径不一样,不可能为了适配 CF 去改代码。

这就很头铁,我就必须找一个一劳永逸的方法(然鹅好像没有


方案1:子域名代替路径(免费)

核心思路:不同服务分配不同子域名,不共用主域名+路径。

改造前

访问地址目标端口
https://mydomain.com/myPath应用8080
https://mydomain.com/主站5080

改造后

访问地址目标端口
https://myPath.mydomain.com/应用8080
https://mydomain.com/主站5080

后端收到的路径就是/,不用改任何代码。

要注意,这不是myPath前后换了换位置,而是数据流传递路由的问题。

操作步骤

1. Cloudflare DNS 加子域名记录

Dashboard → 域名 → DNS → Records → Add Record:

字段
TypeCNAME
NamemyPath
Targetmydomain.com
Proxy开启
TTLAuto

2. 改 cloudflared 配置

ingress:-hostname:myPath.mydomain.comservice:http://localhost:8080-hostname:mydomain.comservice:http://localhost:5080-service:http_status:404

3. 重启 cloudflared

# 先噶掉已有的服务,关闭隧道taskkill/F/IM cloudflared.exe# 重新启动服务或命令行运行,打开隧道cloudflared tunnel--config config.yml run my-domain-bot

4. 验证

  • http://localhost:8080→ 正常
  • https://myPath.mydomain.com/→ 正常
  • https://mydomain.com/→ 正常

为什么有效

  • DNS 层:子域名 CNAME 指向主域名,CF 自动处理 SSL
  • Tunnel 层:hostname匹配子域名,请求完整转发
  • 后端层:路径就是/,Flask 路由直接命中

对比其他方式

方案问题
路径匹配path: /myPath路径不剥离,后端收到/myPath
Origin Rules 改写Free 计划不支持
子域名✅ 免费,不改代码,配置一次管用

注意

  • DNS 记录 1-2 分钟生效
  • 旧链接mydomain.com/myPath需要更新为myPath.mydomain.com
  • 子域名数量没有限制,后续加api.xxxadmin.xxx继续加 CNAME 就行

方案2:本地 Nginx 反向代理(免费,需维护)

思路:在本地起一个 Nginx,让 cloudflared 只指向 Nginx,由 Nginx 负责路径剥离和转发。

适合已经在用 Nginx 的场景,多一层代理但逻辑清晰。

Nginx 配置

server { listen 8080; # 应用服务:剥离 /myPath 前缀 location /myPath/ { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 主站:直接透传 location / { proxy_pass http://localhost:5080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

cloudflared 配置

不再用 path 匹配,全部指向 Nginx:

ingress:-hostname:mydomain.comservice:http://localhost:8080-service:http_status:404

请求流向

用户 → https://mydomain.com/myPath/foo ↓ cloudflared → http://localhost:8080/myPath/foo ↓ Nginx 剥离 /myPath → http://localhost:8080/foo ↓ Flask 收到 /foo → 正常匹配

优缺点

优点缺点
完全免费需要维护 Nginx
路径规则灵活,想怎么改怎么改本地多一个服务要保活
不依赖 CF 付费功能Nginx 挂了全部不通

方案3:cloudflared 自定义转发规则(免费,支持正则)

这个容易和 Origin Rules 搞混,分开说。

3a. Origin Rules(面板功能,付费)

Cloudflare 面板里的 Origin Rules 可以重写路径,但仅 Pro 及以上计划可用,Free 用户用不了。

操作:Dashboard → Rules → Origin Rules → Create rule

字段
WhenHostname equalsmydomain.comANDURI Path starts with/myPath
ThenRewrite URI → Path → Static →/

缺点:只能静态替换,/myPath/foo会变成/foo,但如果路径里有动态部分,处理不了。


3b. cloudflared 自定义转发规则(免费,推荐)

cloudflared 本身支持Custom Forwarding Rules,可以用正则表达式动态剥离路径前缀。Free 计划可用,不需要付费。

config.yml里加:

custom_forwarding_rules:-hostname:mydomain.comforward:-path:^/myPath(/.*)?$destination:http://localhost:8080rewrite:/$1

或者更简洁的写法,直接在 ingress 里用path配合 rewrite(cloudflared 2024+ 版本支持):

ingress:-hostname:mydomain.compath:/myPathservice:http://localhost:8080originRequest:transform:-method:regex_replacepattern:^/myPath(/?.*)$replacement:$1

请求流向

用户 → https://mydomain.com/myPath/foo ↓ cloudflared 正则匹配,剥离 /myPath ↓ 后端收到 /foo → Flask 正常匹配

优缺点

优点缺点
免费,不需要付费 Plan需要编辑配置文件,正则写错会全挂
正则替换,动态路径也能处理cloudflared 版本要够新(2024+)
不用改后端代码调试不如面板直观

我选的方案1

子域名方案最省事:免费、不改代码、不用维护额外服务、不依赖付费功能。唯一的代价是要改一下访问链接,但长远来看最干净。

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

AI大模型从零到精通:AI大模型学习路线图与实战指南!速进!

1. 打好基础:数学与编程 数学基础 线性代数:理解矩阵、向量、特征值、特征向量等概念。 推荐课程:Khan Academy的线性代数课程、MIT的线性代数公开课。 微积分:掌握导数、积分、多变量微积分等基础知识。 推荐课程:Kha…

作者头像 李华
网站建设 2026/6/16 17:36:00

AtlasOS软件管理终极指南:3步搞定Windows应用安装卸载难题

AtlasOS软件管理终极指南:3步搞定Windows应用安装卸载难题 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and usability. 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华
网站建设 2026/6/16 17:18:49

GBase数据库兼容Oracle的五大正则函数解析

本文基于南大通用GBase数据库(gbase database)兼容 Oracle 的五大正则系列函数测试用例整理,覆盖 REGEXP_LIKE、REGEXP_COUNT、REGEXP_INSTR、REGEXP_SUBSTR、REGEXP_REPLACE,完全对标 Oracle 数据库正则语法、参数规则、匹配标记…

作者头像 李华
网站建设 2026/6/16 17:17:22

CMAKE配置CUDA

cmake_minimum_required(VERSION 3.8) # 或更低版本cmake_policy(SET CMP0091 NEW)# 旧FindCUDA专属:全局给nvcc加CRT参数,覆盖默认MT if(MSVC)set(CUDA_NVCC_FLAGS_RELEASE "${CUDA_NVCC_FLAGS_RELEASE} -Xcompiler/MD")set(CUDA_NVCC_FL…

作者头像 李华
网站建设 2026/6/16 17:17:11

Python权限管理终极指南:PyCasbin完整教程与实战应用

Python权限管理终极指南:PyCasbin完整教程与实战应用 【免费下载链接】casbin-pycasbin An authorization library that supports access control models like ACL, RBAC, ABAC in Python 项目地址: https://gitcode.com/gh_mirrors/py/casbin-pycasbin 在当…

作者头像 李华