Cloudflare Tunnel路由规则异常:sub2域名指向错误服务
Cloudflare Tunnel Ingress规则未完整加载问题排查
问题场景
已按Cloudflare官方文档配置Tunnel及ingress规则,config.yml内容如下:
tunnel: [my-tunnel-id] credentials-file: /Users/me/.cloudflared/[my-tunnel-id].json ingress: - hostname: sub1.myurl.com service: http://localhost:3000 - hostname: sub2.myurl.com service: http://localhost:3001 - service: http_status:404
DNS记录中sub1、sub2子域名的CNAME均指向[my-tunnel-id].cfargotunnel.com,本地隧道及两个运行在localhost:3000、localhost:3001的应用均正常运行。但访问sub2.myurl.com时加载的是3000端口的应用,而非3001端口。
隧道日志显示仅加载了第一条ingress规则:
2023-05-12T08:11:46Z INF Updated to new configuration config="{\"ingress\":[{\"originRequest\":{}, \"service\":\"http://localhost:3000\"}], \"warp-routing\":{\"enabled\":false}}" version=3
但本地执行规则测试时,两个域名均能匹配对应规则:
$ cloudflared tunnel ingress rule https://sub1.myurl.com Using rules from /Users/me/.cloudflared/config.yml Matched rule #1 hostname: sub1.myurl.com service: http://localhost:3000 $ cloudflared tunnel ingress rule https://sub2.myurl.com Using rules from /Users/me/.cloudflared/config.yml Matched rule #2 hostname: sub2.myurl.com service: http://localhost:3001
问题原因及解决办法
1. 隧道启动未指定正确配置文件路径
本地测试命令会自动读取默认路径的配置文件,但隧道进程启动时可能未指定配置文件,导致加载了其他路径的不完整配置。
- 解决:启动隧道时明确指定配置文件路径:
启动后查看日志,确认是否加载了完整的ingress规则。cloudflared tunnel run --config /Users/me/.cloudflared/config.yml [my-tunnel-id]
2. Cloudflare远程配置覆盖本地ingress规则
如果在Cloudflare Dashboard的隧道管理页面中配置了Public Hostnames,远程配置会优先于本地config.yml的规则。若仅在Dashboard中添加了sub1的规则,会导致sub2请求匹配不到远程规则, fallback到本地仅加载的第一条规则。
- 解决:
进入Cloudflare Dashboard的隧道详情页,查看Public Hostnames列表,若存在远程配置,要么删除所有远程配置让本地规则生效,要么在Dashboard中添加sub2对应的规则(指向localhost:3001)。
3. 配置文件权限不足
运行cloudflared的用户没有读取/Users/me/.cloudflared/config.yml的权限,导致隧道进程无法加载完整规则,使用了缓存或默认配置。
- 解决:检查配置文件权限,确保运行用户有读取权限:
若权限不足,可执行修改权限命令(示例):ls -l /Users/me/.cloudflared/config.ymlchmod 644 /Users/me/.cloudflared/config.yml
内容的提问来源于stack exchange,提问作者artooras
相关产品推荐
相关产品推荐

