Cloudflare Tunnel 配置指南
本文档描述了如何配置和管理 Cloudflare Tunnel 来代理本地开发服务。
概述
我们使用一个 Cloudflare Tunnel (hugo-dev
) 来管理多个本地开发服务的外网访问,包括:
- Hugo 开发服务器 (
dev.jimmysong.io
→localhost:1313
) - n8n 工作流平台 (
n8n.jimmysong.io
→localhost:5678
)
隧道配置
隧道信息
- 隧道名称:
hugo-dev
(历史原因保留,实际用作多服务隧道) - 隧道 ID:
YOUR_TUNNEL_ID
- 配置文件:
~/.cloudflared/dev-services-config.yml
- 凭证文件:
~/.cloudflared/YOUR_TUNNEL_ID.json
配置文件结构
# Cloudflare Tunnel: 开发环境多服务隧道
# 隧道名称:hugo-dev (历史原因保留此名称,实际用作多服务隧道)
tunnel: hugo-dev
credentials-file: ~/.cloudflared/YOUR_TUNNEL_ID.json
ingress:
# Hugo 开发服务器
- hostname: dev.jimmysong.io
service: http://localhost:1313
# n8n 工作流自动化平台
- hostname: n8n.jimmysong.io
service: http://localhost:5678
# 可以在这里添加更多开发服务
# - hostname: app.jimmysong.io
# service: http://localhost:3000
# Catch-all rule, this should be last!
- service: http_status:404
管理命令
启动隧道
# 启动隧道 (需要取消代理环境变量)
nohup env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY \
cloudflared tunnel --config ~/.cloudflared/dev-services-config.yml \
run hugo-dev > /tmp/dev-services-tunnel.log 2>&1 &
查看状态
# 查看所有隧道状态
cloudflared tunnel list
# 查看隧道详细信息
cloudflared tunnel info hugo-dev
# 查看运行进程
ps aux | grep cloudflared | grep -v grep
# 查看日志
tail -f /tmp/dev-services-tunnel.log
停止隧道
# 停止所有 cloudflared 进程
pkill cloudflared
DNS 配置
以下域名已配置 CNAME 记录指向隧道:
域名 | 本地服务 | 用途 |
---|---|---|
dev.jimmysong.io | localhost:1313 | Hugo 开发服务器 |
n8n.jimmysong.io | localhost:5678 | n8n 工作流平台 |
添加新服务
要添加新的本地服务到隧道:
- 停止隧道:
pkill cloudflared
- 编辑配置文件:
vim ~/.cloudflared/dev-services-config.yml
在 ingress
段添加新的服务路由:
- hostname: new-service.jimmysong.io
service: http://localhost:PORT
- 配置 DNS 记录:
cloudflared tunnel route dns hugo-dev new-service.jimmysong.io
- 重启隧道:
nohup env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY \
cloudflared tunnel --config ~/.cloudflared/dev-services-config.yml \
run hugo-dev > /tmp/dev-services-tunnel.log 2>&1 &
故障排除
常见问题
- 多个隧道进程冲突:
# 问题:同时运行多个 cloudflared 进程
ps aux | grep cloudflared | grep -v grep
# 解决方案:使用清理命令
make tunnel ACTION=clean
# 或
./tools/tunnel-manager.sh clean
- 配置文件冲突:
# 问题:项目本地配置与全局配置冲突
# 检查是否存在冲突配置
ls -la .cloudflared/config.yaml
ls -la ~/.cloudflared/dev-services-config.yml
# 解决方案:移除项目本地配置(推荐使用全局配置)
mv .cloudflared/config.yaml .cloudflared/config.yaml.backup
- Error 1033: 隧道无法连接
- 检查隧道是否正在运行:
cloudflared tunnel list
- 查看日志:
tail -f /tmp/dev-services-tunnel.log
-
确认本地服务是否启动:
curl http://localhost:PORT
-
连接超时: 可能是代理导致
- 确保启动时使用了
env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY
-
检查防火墙设置
-
DNS 解析问题:
- 等待 DNS 传播 (通常几分钟)
- 使用
dig
或nslookup
验证 DNS 记录
日志位置
- 隧道日志:
/tmp/dev-services-tunnel.log
- Cloudflare 配置目录:
~/.cloudflared/
安全注意事项
- 凭证文件 (
*.json
) 包含敏感信息,不应提交到版本控制 - 本地服务只通过隧道暴露,不直接暴露在公网
- 隧道连接使用 TLS 加密