在 Cloudflare Tunnel 中,新建映射的核心目的,是把一个公网 hostname 转发到本地运行的服务,例如把 app.example.com 映射到 http://localhost:3003。
前置条件
开始之前,默认你已经完成下面几件事:
- 已在 Cloudflare 中创建好一个 Tunnel
- 已安装并登录
cloudflared - 已拿到对应的
TUNNEL_UUID - 本地服务已经启动,例如
http://localhost:3003
1. 配置映射
假设你的域名是 app.example.com,应用监听地址是 http://localhost:3003,那么 cloudflared 配置文件 /etc/cloudflared/config.yml 可以这样写:
tunnel: <TUNNEL_UUID>
credentials-file: /root/.cloudflared/<TUNNEL_UUID>.json
ingress:
- hostname: app.example.com
service: http://localhost:3003
- service: http_status:404
Cloudflare 官方文档要求 ingress 规则最后必须有一个 catch-all 规则,一般就是 http_status:404。
2. 创建 DNS 路由
如果这个 hostname 还没有绑定到 tunnel,可以执行:
cloudflared tunnel route dns <TUNNEL_NAME_OR_UUID> app.example.com
其中,TUNNEL_NAME_OR_UUID 就是 config.yml 中使用的 TUNNEL_UUID,也可以直接使用 tunnel 名称。
这个命令会自动创建一条指向 tunnel 的 DNS CNAME 记录。
3. 重启 cloudflared
修改配置后,重启 cloudflared 服务使配置生效:
sudo systemctl restart cloudflared
sudo systemctl status cloudflared
此时访问 app.example.com,通常就可以访问到你的应用了。
4. 控制台手工补充 Tunnel 路由
如果 app.example.com 还是无法访问,可以到 Cloudflare 控制台手工增加一条 Tunnel 路由。
操作路径如下:
- 登录 Cloudflare 控制台
- 进入你的域名管理页面
- 打开
DNS->Records->Tunnels - 选择“添加路由” -> “已发布的应用程序”
然后填写:
hostname:app.example.com- 服务 URL:
http://localhost:3003
保存后,再次访问域名即可验证映射是否生效。
常见排查
如果配置后仍然无法访问,优先检查下面几项:
cloudflared是否已经重启hostname是否已经正确绑定到 Tunnel- 本地服务是否真的监听在目标端口
- DNS 记录是否已经生效
文章标签
冬眠
博主专注于技术、阅读与思考。在这里记录学习、思考与生活。
系列:Cloudflare Tunnel
第 2 篇,共 2 篇
