# cdrop(drop.)的 Caddy 接线示例。换上你的域名、cdrop 服务名(NN-cdrop)、 # broker 内网地址(BROKER-IP:PORT)。 # # cdrop 迁移到 Auth Broker(路径 A)后,边缘由 broker /verify 终结鉴权并注入 X-Auth-* 头: # - 含 Authorization: Bearer 的请求 → 机器分支(QR 配对设备 / iOS / 桌面,持 broker 机器令牌) # - 不含 Bearer 的请求 → 人类分支(全新浏览器全局 SSO,带 broker 域 cookie) # - 一组公开端点必须放行不鉴权,否则未登录设备无从登录 / 刷新。 # # 前置:用 xcaddy 把 caddybroker 编进 caddy-custom,并在全局块声明 # { order broker before reverse_proxy } # 否则 `handle { broker ... }` 报 "not an ordered HTTP handler"。 # # 关键开关: # - flush_interval -1 :禁用 reverse_proxy 对 SSE 长响应的缓冲,否则 /api/hub/events 看似无事件 # - copy_headers 须含 X-Auth-Meta(cdrop 据它定位托管设备);caddybroker 默认已含, # 但旧 caddy-custom 镜像须**重建**才生效——接 cdrop 那次必须连带重建。 drop.your-domain.example { import tls_min # 公开端点(放行不鉴权):登录引导(302 跳 broker)/ 原生取 broker 坐标 / 令牌刷新代理 / # 扫码公开端点(新设备未登录,凭 poll_secret 自证)。 @public path /api/auth/login /api/auth/config /api/auth/refresh /api/auth/qr/start /api/auth/qr/status handle @public { reverse_proxy NN-cdrop:8080 { flush_interval -1 } } # 受控 /api/* 机器分支:含 Bearer → broker /verify 验机器令牌 → 注入 X-Auth-*。 @apiBearer { path /api/* header Authorization Bearer* } handle @apiBearer { broker BROKER-IP:8080 { app cdrop copy_headers X-Auth-Subject X-Auth-Name X-Auth-Roles X-Auth-Scope X-Auth-Kind X-Auth-Meta } reverse_proxy NN-cdrop:8080 { flush_interval -1 } } # 受控 /api/* 人类分支:无 Bearer → broker /verify 验全局 SSO cookie → 注入 X-Auth-*。 @api path /api/* handle @api { broker BROKER-IP:8080 { app cdrop copy_headers X-Auth-Subject X-Auth-Name X-Auth-Roles X-Auth-Scope X-Auth-Kind X-Auth-Meta } reverse_proxy NN-cdrop:8080 { flush_interval -1 } } # 静态 SPA 壳(其余路径):放行不鉴权,前端自行引导登录。 handle { encode gzip reverse_proxy NN-cdrop:8080 { flush_interval -1 } } }