剪藏#剪藏#阿皓AI

Cloudflare Tunnel:零成本给 localhost 一个公网身份

2026 年 8 月 18 日1 分钟
分享Twitter / XTelegram微博
Cloudflare Tunnel:零成本给 localhost 一个公网身份 封面

如果你在本地跑了一个服务,需要分享给客户或者其他人,亦或是项目需要对接支付回调,用 Cloudflare Tunnel 是目前最省事的方案。免费、不需要公网 IP、自带 HTTPS。

1. 安装 cloudflared

先装官方客户端:

macOS

JAVASCRIPT
brew install cloudflared

Windows

去官方下载页:Cloudflare Tunnel Downloads

Linux

JAVASCRIPT
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

2. 临时公网(先试水,最快上手)

假设本地服务跑在 http://localhost:3000,一行命令:

JAVASCRIPT
cloudflared tunnel --url http://localhost:3000

输出会给你一个临时域名:

JAVASCRIPT
https://xxxxx.trycloudflare.com

打开就能访问,整个过程 30 秒。

缺点:域名每次重启会变,只适合临时演示和调试。要长期用,看下一节。

3. 长期稳定域名(正式玩法)

前置条件:你有一个域名,并已经托管在 Cloudflare(即 DNS 用 Cloudflare 解析)。

3.1 登录 Cloudflare

JAVASCRIPT
cloudflared tunnel login

会自动打开浏览器,让你选择要授权的域名:

Notion image

选好之后回到终端,会提示授权完成。

3.2 创建 Tunnel

给隧道起个名字(比如 TimeSugar):

JAVASCRIPT
cloudflared tunnel create TimeSugar

终端会输出 Tunnel ID 和凭证文件路径:

Notion image

凭证文件长这样:~/.cloudflared/{tunnel-id}.json别泄露,等同于隧道的钥匙。

3.3 绑定域名

把这个 Tunnel 关联到你想用的域名:

JAVASCRIPT
cloudflared tunnel route dns TimeSugar al.timesugar.com

这条命令会自动在 Cloudflare 上创建对应的 CNAME 记录,不用手动去后台点:

Notion image

3.4 配置 YAML

创建配置文件:

JAVASCRIPT
touch ~/.cloudflared/config.yml

写入内容(注意把 tunnelcredentials-filehostname 换成自己的):

JAVASCRIPT
tunnel: TimeSugar
credentials-file: /Users/wesley/.cloudflared/xxxxx.json ingress:
  - hostname: al.timesugar.com
    service: http://localhost:3008
  - service: http_status:404

Notion image

service: http://localhost:3008 对应的是本地服务。 最后那条 http_status:404 是兜底——任何没匹配上的请求统一返回 404。

3.5 启动

JAVASCRIPT
cloudflared tunnel run TimeSugar

终端会打出连接日志,看到 Initial protocol quic 和几条 INF 就说明已经连上 Cloudflare 边缘节点:

Notion image

现在 https://al.timesugar.com 已经映射到本地 localhost:3008。HTTPS 证书 Cloudflare 自动签发,不用管。

4. 开机自动运行(可选)

macOS 运行:

bash brew services start cloudflared Linux 运行: bash sudo systemctl enable cloudflared sudo systemctl start cloudflared

5. 常见踩坑

Q1: 报错 Blocked request. This host is not allowed.

本地服务(比如 Vite、Next.js dev server)默认禁止未知 Host。两种解法:

  • Vite:vite.config.js 里加 server.allowedHosts: ['al.timesugar.com']

  • Next.js:用 next dev -H 0.0.0.0 或者改 next.config.js

Q2: 浏览器报 ERR_CONNECTION_REFUSED

本地服务根本没启动。先确认 curl http://localhost:3008 能通再来跑 tunnel。

Q3: localhost 能访问,公网打不开

服务只监听了 127.0.0.1,没监听 0.0.0.0。常见于 Python 的 flask run 默认只绑回环——加 --host 0.0.0.0 即可。

Q4: Unable to reach the origin service / connection refused

本机防火墙没放开端口。macOS 检查"系统设置 → 网络 → 防火墙";Linux 用 ufw allow 3008 或检查 iptables。

一句话总结

trycloudflare.com 临时域名适合调试,tunnel create + config.yml + tunnel run 三件套适合长期。整个过程不用买 VPS、不用公网 IP,免费用到底。

原文地址: https://mp.weixin.qq.com/s?__biz=Mzk4ODAxNTg5OA==&mid=2247484058&idx=1&sn=81c59fb09c682f4818315c30327023b0&chksm=c4459cc937e2d2020c7321ff2a93b8e137cfaf015d97d0cc473e92c4838dcec4c57af71d473a&mpshare=1&scene=1&srcid=0518CoMqLVwynnz67skBd44u&sharer_shareinfo=50818129519768860bb55d43e6f93924&sharer_shareinfo_first=50818129519768860bb55d43e6f93924#rd

相关文章