视觉按最新原型,业务按已确认PRD。现有代码为满足设计而改造。执行见按设计实施与任务卡;当前代码与验证范围见消费者功能页。
可信代理与登录限流
2026-10-04。短剧库的 Go 网关已支持明确配置的可信入站代理,登录仍复用 Better Auth 官方邮箱 OTP。App和原生包没有修改;这是网站前面的反向代理配置,视频出网线路继续使用已有后台管理。
此前只取 Go 的直接连接 IP,反向代理后的用户可能共用一个验证码限流桶,并被错误标为邀请共享 IP。现在登录和内部业务调用复用同一 IP 识别函数:默认忽略转发头;可信网段内的代理才允许提供 X-Forwarded-For,从右侧找第一个不可信节点。客户端在左侧追加假 IP 无效。
接入
复用现有可导入函数,示例只列新增配置。调用者需要重新编译当前 Go 程序;无需重建 App。
const application = createDramivioApplication({
...configuration,
web: {
...configuration.web,
trustedProxyCIDRs: ['127.0.0.1/32', '::1/128'],
},
});
没有可信代理时省略该参数。组合启动函数明确设置空列表,不会从调用者的环境变量意外继承信任。
Go 直接调用也支持同样配置,仍在监听前执行:
err := website.ConfigureConsumerPlatform(platformURL, bridgeToken,
app.ConsumerProxyOptions{TrustedProxyCIDRs: []string{"127.0.0.1/32"}})
旧的两个参数调用保持兼容。原程序独立启动读取 DRAMIVIO_TRUSTED_PROXY_CIDRS,使用逗号分隔网段;该配置不进入公开配置或普通后台表单。
推荐让 Nginx 先恢复经过验证的客户端地址,再覆盖发给 Go 的头。只信任 Nginx 的实际连接地址,不信任用户或整个内网的网段。Nginx 的 set_real_ip_from 和 real_ip_header 负责明确入口的地址恢复,使用其成熟模块。Nginx realip 文档
location / {
proxy_pass http://127.0.0.1:8998;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
}
如果前面有 Cloudflare,先在 Nginx 的 realip 配置中仅信任运营核对的 Cloudflare 官方网段,用 CF-Connecting-IP 恢复地址。Go不直接相信客户端提交的该头。Cloudflare 的 Pseudo IPv4 “Overwrite Headers” 会改写 IPv6 地址,应在正式配置中关闭覆盖模式或明确处理真实 IPv6;本轮没有启用此模式或验证真实 CDN。Cloudflare 请求头文档
验证与能力边界
| 范围 | 结果 |
|---|---|
| Go 定向代理用例 | 14种路径,同时验证登录和内部业务转发;默认/非代理拒伪造、两级代理、未知中间节点、重复头、错误节点、IPv6与IPv4映射 |
| 相关 Go race 回归 | 50项含子项通过、5项需要另行启动的联合夹具跳过;32个顶层通过,无 race |
| 实际服务启动 | 6/6通过;新配置输入检查、真实子进程收到指定网段、默认不继承环境信任 |
| Payload/启动全量 | 88/88通过,包含既有回归 |
| Go 构建 | 当前源码通过 |
| 真实双代理 → Go → Better Auth → PG | 两个实际TCP来源IP、三个验证账户;档案和官方会话保存正确IP。不同IP无共享标记,同IP仍保留标记;第四次发码429、三次伪造重试均429,另一IP仍200;两条邀请、零奖励,上游请求禁止 |
联合测试的代理和TCP客户端在临时 Linux 容器中运行,Go、官方认证和隔离RAM PostgreSQL使用实际服务。OTP本地捕获、Cookie jar驱动HTTP;不是本轮Chrome/App界面、真实Nginx/Cloudflare或SMTP验收。测试容器和监听已关闭,没有给电脑增加IP别名。不同检查存在包含关系,不能相加作为独立测试数。
格式错误、0/0或重复选项配置会在监听前拒绝;失败不替换已有配置。无法解析的可信链节点退回实际连接IP,不采信其他声称IP的头。Origin、官方Cookie和敏感操作头继续由原框架处理;用户提交的内部身份头仍被移除。
同IP只是风险信号,不能证明是同一个人;本轮不改变邀请资格、24小时窗口、设备约束、奖励账本或Web10/App50。可信网段配得过宽仍会误信其中的终端,正式部署必须使用实际代理地址。Nginx配置片段是接入说明,没有修改机器或线上配置。
本轮主Agent复核,没有新增独立子Agent审查。没有新增生产依赖、数据库迁移、认证框架或App变更。实际CDN/生产入口、真实SMTP、安装及观看证明仍待验收。