限制、超时与常量

编译期常量 ​

宏值在哪用
CFD_EDGE_DEFAULT / CFD_EDGE_DEFAULT_PORTregion1.v2.argotunnel.com / 7844cfd_tunnel_edge 默认值
CFD_EDGE_SNIh2.cftunnel.com边缘 TLS 的 SNI 与证书校验名(常量,与 cfd_tunnel_edge 无关)
CFD_CONNECT_TIMEOUT_MS5000TCP 连接超时默认值
CFD_HANDSHAKE_TIMEOUT_MS10000TLS 握手超时默认值
CFD_BQ_HWM_DEFAULT1 MiB单流背压高水位默认值
CFD_GLOBAL_BQ_DEFAULT64 MiB全局背压预算默认值
CFD_STALL_WINDOW_DEFAULT60000 ms停滞窗口默认值
CFD_STALL_RATIO_DEFAULT0比例判据默认关闭
CFD_STALL_MIN_BQ_DEFAULT512 KiB停滞判据的最少积压
CFD_REJECT_RATIO_DEFAULT90 %拒新流阈值
CFD_RESP_HWM256 KiB响应方向待写字节高水位
CFD_HOUSEKEEPING_TICK1000 ms内务定时器周期(背压/超时采样)
CFD_TUNNEL_READ_BUDGET64单次事件循环里每条隧道最多处理的事件数(≤ 1 MiB / 事件)
CFD_CFG_BODY_MAX4 MiB远程配置体上限
CFD_CFG_RESP_MAX4096 B远程配置应答缓冲
CFD_MATCH_PATH_MAX4096 B超长 path 不做规则匹配(按最后一条兜底 + WARN)
CFD_REQ_MAX_HDRS / CFD_REQ_NAME_MAX192 / 64 B请求 trailer 条目数 / 单个 name 长度
CFD_JSON_MAX_DEPTH / CFD_JSON_MAX_NODES64 / 262144模块自带 JSON 解析器的深度与节点上限
CFD_CREDS_TAG_MAX / CFD_CREDS_SECRET_MAX64 / 64 B凭据字段缓冲

每条虚拟连接的资源占用 ​

资源数量说明
连接槽1 个来自 ngx_get_connection(),与真实客户端连接抢同一个 connections 数组
fd2 个socketpair(AF_UNIX) 的两端:sv[0] 是 c->fd(身份载体,数据不走它),sv[1] 只作对端占位、随连接池 cleanup 关闭
连接池listener->pool_sizengx_create_pool(target->ls->pool_size),合成请求头块与槽位表都在里面
槽位映射指针数组 connection_n 项按 c - ngx_cycle->connections 下标 O(1) 查表,随 connection_n 变化重建

所以并发注入的连接数同时受 worker_connections 与 RLIMIT_NOFILE 约束,而且每条要按 两个 fd 留余量(nginx 的 worker_rlimit_nofile 就是这么算的)。注入不存在「额外的 socket 连接」—— 这些 fd 不承载任何数据,只用来让 nginx 的连接生命周期保持原生。

超时与重连的默认值一览 ​

项默认指令
TCP 连接5 scfd_tunnel_connect_timeout
TLS 握手10 scfd_tunnel_handshake_timeout
心跳关闭cfd_tunnel_ping_interval(建议生产 15 s)
心跳判死15 scfd_tunnel_ping_timeout
重连退避初值 / 上限1 s / 60 scfd_tunnel_reconnect_delay / _max
快速隧道 provisioning15 scfd_tunnel_quick_timeout
远程配置下发读完一个完整 JSON 值就应答—

nginx 侧的门槛(不是模块的) ​

指令默认影响
client_max_body_size1m大的上传会被 nginx 自己回 413
client_body_timeout60s慢上传断连
proxy_read_timeout60sWebSocket 空闲连接会被切

明确不支持(不是「还没配」) ​

能力处置
stream {} 级裸 TCP不支持(模块在 HTTP 链上)
裸 TCP 隧道流(ssh / rdp / smb / tcp / bastion)传输层 RST_STREAM(REFUSED_STREAM)
远程配置里的 unix: / hello_world / 未知 scheme本地没写 inject_listen 时 502
远程 path 正则的完整子集只支持字面量 / 两端 ^$ / .* / .+;其余整份拒绝
token 里的 e(区域)启动期报错,不猜地址
tracing / OTel 生成未实现
punycode 主机名变体未实现(用主人名写法)
OTP / --allowed-mail(quick tunnel 保护)未实现

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