# 可信代理与登录限流

2026-10-04。短剧库的 Go 网关已支持明确配置的可信入站代理，登录仍复用 Better Auth 官方邮箱 OTP。App和原生包没有修改；这是网站前面的反向代理配置，视频出网线路继续使用已有后台管理。

此前只取 Go 的直接连接 IP，反向代理后的用户可能共用一个验证码限流桶，并被错误标为邀请共享 IP。现在登录和内部业务调用复用同一 IP 识别函数：默认忽略转发头；可信网段内的代理才允许提供 `X-Forwarded-For`，从右侧找第一个不可信节点。客户端在左侧追加假 IP 无效。

## 接入

复用现有可导入函数，示例只列新增配置。调用者需要重新编译当前 Go 程序；无需重建 App。

```js
const application = createDramivioApplication({
  ...configuration,
  web: {
    ...configuration.web,
    trustedProxyCIDRs: ['127.0.0.1/32', '::1/128'],
  },
});
```

没有可信代理时省略该参数。组合启动函数明确设置空列表，不会从调用者的环境变量意外继承信任。

Go 直接调用也支持同样配置，仍在监听前执行：

```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 文档](https://nginx.org/en/docs/http/ngx_http_realip_module.html)

```nginx
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 官方网段](https://www.cloudflare.com/ips/)，用 `CF-Connecting-IP` 恢复地址。Go不直接相信客户端提交的该头。Cloudflare 的 Pseudo IPv4 “Overwrite Headers” 会改写 IPv6 地址，应在正式配置中关闭覆盖模式或明确处理真实 IPv6；本轮没有启用此模式或验证真实 CDN。[Cloudflare 请求头文档](https://developers.cloudflare.com/fundamentals/reference/http-headers/)

## 验证与能力边界

| 范围 | 结果 |
| --- | --- |
| 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、安装及观看证明仍待验收。

[验证数据](dramivio-trusted-proxy-validation.json) · [当前开发状态](dramivio-development-status.md) · [邮箱邀请恢复](dramivio-registration-recovery-development.md)
