运维与排障

上线检查清单 ​

text
□ nginx -t 通过,且 nginx -V 里能看到模块(或 modules-enabled 里有链接)
□ 凭据来源只有一个(credentials / token / token_file / quick 四选一)
□ 凭据文件对 worker 用户可读(chmod 600 + chown www-data)
□ inject_listen 指向的 listen 在同一个 nginx 里存在
□ 大上传的 client_max_body_size / client_body_timeout 已放开
□ 用了 realip 的话,set_real_ip_from 与新地址一致(见「真实客户端 IP」)
□ worker_connections / worker_rlimit_nofile 有余量(每条在途注入连接 = 1 个连接槽 + 2 个 fd)
□ allow/deny、limit_req/limit_conn 里按 127.0.0.1 写的键已按需更新
□ 重启(restart)而不是 reload

看日志 ​

bash
grep -E 'cfd_tunnel' /var/log/nginx/error.log | tail -50
  • 成功注册:NOTICE cfd_tunnel: 已注册到边缘(location=…),注入目标 …
  • 多隧道带前缀:cfd_tunnel: [edge-a] …(扁平那条不带前缀,与 0.10.0 逐字节一致)
  • 失败一律 ERR,并且带原因:连接边缘失败、凭据读取失败、token 解析失败、provisioning 失败、 裸TCP 流被丢弃、注入目标不存在、纯端口有歧义……
  • 要协议细节:cfd_tunnel_verbose on(INFO 级,量大,别长期开)

排障对照表 ​

症状可能原因怎么办
完全没有 cfd_tunnel 日志模块没加载 / 三种凭据来源都没写 / 配置被 include 漏掉nginx -V 看模块;补凭据;确认 include modules-enabled/*.conf
「读取凭据 … 失败」权限或路径chown www-data、chmod 600、绝对路径
「token 不是合法的 base64」内联 token 尾部有空白(不 trim)删掉空白,或改用 token_file(会 TrimSpace)
「token 带 endpoint/region」token 里有 e(如 FedRAMP)本模块只连一个 cfd_tunnel_edge,这条不支持
注册成功但访问 404Host 没命中任何 server_name,落到默认 server写 server_name,或用 host_override
访问落到错的后端多条隧道指向同一端口让每条隧道用不同的 inject_listen
上传大文件 413client_max_body_size 默认 1m放开到需要的大小
上传大文件 504 / 断client_body_timeout 默认 60s放开 client_body_timeout
$remote_addr 全是 127.0.0.1没配 realip 或 inject_source_addr见 真实客户端 IP
隧道请求被 deny 掉realip 让地址变了规则按新地址写
边缘回 502远程规则命中不支持的 service本地写 inject_listen,或改 dashboard 的 ingress
ssh / rdp 连不上裸 TCP 不支持(定案)用 cloudflared,或用别的方案
连接反复重连边缘不可达 / 证书校验失败 / 代理没配看 ERR 行;cfd_tunnel_verbose on;cfd_tunnel_ca_file

日志字典 ​

完整的消息清单(含频道与级别)见 日志与错误消息。

重启 vs reload ​

bash
nginx -t && systemctl restart nginx     # 必须 restart

load_module 发生在配置解析之前,reload 不会重新加载动态模块 —— 升了 .deb 之后尤其注意。

快速隧道运维 ​

bash
cfd-quick-url                 # 最新一条临时地址
cfd-quick-url -a              # 全部
grep -c '快速隧道临时地址' /var/log/nginx/error.log

临时隧道重启即换地址、失败不重试,只适合演示与自测。

抓现场 ​

bash
# worker 崩溃调用栈(配置里先有 env CFD_CRASH_BACKTRACE;)
CFD_CRASH_BACKTRACE=/var/log/nginx/crash.txt nginx
addr2line -f -C -e /usr/lib/nginx/modules/ngx_http_cfd_tunnel_module.so <偏移>

# 死循环
kill -ABRT <worker_pid>

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