快速隧道(临时地址)

不想注册域名、手头也没有凭据时,可以让模块自己申请一条临时隧道,拿到一个 https://<随机单词>.trycloudflare.com 的地址。这就是 cloudflared cloudflared tunnel --url 的 quick tunnel 模式。

nginx
http {
    cfd_tunnel_quick_tunnel  on;                                # 开关(开了就不用凭据)
    # cfd_tunnel_quick_service https://api.trycloudflare.com;   # 可选,默认即此
    # cfd_tunnel_quick_timeout 15000;                           # 可选,默认 15s

    cfd_tunnel_inject_listen 127.0.0.1:8090;

    server {
        listen      127.0.0.1:8090;
        # 随机域名,只能靠默认 server 兜住
        location / {
            proxy_pass http://127.0.0.1:3000;
        }
    }
}

启动后模块会 POST https://api.trycloudflare.com/tunnel 申请隧道,把拿到的凭据当普通凭据用, 并把地址写进 error_log:

text
cfd_tunnel: 快速隧道临时地址(重启即变)https://random-words-here.trycloudflare.com

查地址 ​

bash
cfd-quick-url              # 最新一条
cfd-quick-url -n 3         # 最近 3 条
cfd-quick-url -a           # 全部
cfd-quick-url -q           # 只输出 URL(便于 $(...) 取值)

不想用命令也可以 grep(日志行的形状是固定的):

bash
grep -o '快速隧道临时地址(重启即变)https://[^ ]*' /var/log/nginx/error.log | tail -1

边界:这个模式只是临时用 ​

事实说明
只有 0 号 worker 建这条隧道cloudflared 对 quick tunnel 固定 HaConnections=1,模块照抄
重启就会换地址每次启动重新申请,随机域名不可保留
不重试申请失败就放弃(cloudflared 同样只申请一次),error_log 有原因
只走 HTTP/2provisioning 与服务端必须协商 ALPN=h2,没协商到就明确失败,不做 h1.1 回退
不做 OTP / --allowed-mail 保护cloudflared 的 quicktunnelauth 子系统未实现
代理只作用于这一段provisioning 认 HTTPS_PROXY 等标准环境变量(项目扩展:cloudflared 的 http.Transport 里 Proxy == nil,它不读);连边缘仍然直连,见 TLS 与代理。走代理时日志会写明「经代理 …」,绝不静默

与多隧道一起用 ​

快速隧道也能写成块:

nginx
cfd_tunnel {
    name          demo-1;
    quick         on;
    inject_listen 127.0.0.1:8090;
}

多条快速隧道可以让不同域名落到不同端口;也可以两条指向同一个端口(注入期间改监听器标志位是 同步的,并发安全),但请求会落到该 listen 的默认 server。

记忆点

cfd_tunnel_quick_tunnel 与 cfd_tunnel_credentials(以及 token / token_file)互斥 —— 同时配 nginx -t 直接失败。这是有意的:一个「到底连哪条隧道」的问题不该靠优先级猜。

模块文档 · 对齐依据是 cloudflared 的源码与实测行为