sub2api/docs/memorys/2026-05-26-主站测速与限速核对.md
zizi 6814fa2a62 docs(ops): record proxy-ng deployment hardening
Add deployment traces for the JPpro proxy node, RackNerd origin hosts, catproxy boundary changes, local speed checks, and Sub2API rate-limit behavior.

Keep remote secrets excluded while tracking sanitized nginx, compose, plan, and operational memory documents.
2026-05-26 23:27:41 +08:00

82 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 主站测速与限速核对
日期2026-05-26
## 本机链路测速结论
从当前本机网络直连测试,`proxy.api.lilifamily.com` 经 JPpro 的 HTTPS 轻量请求比 `catproxy.lilifamily.com` 直连 3c4g 更快、更稳。
| 测试项 | 直连 `catproxy.lilifamily.com` | 经 JPpro `proxy.api.lilifamily.com` |
|---|---:|---:|
| `/health` 中位总耗时 | `0.763s` | `0.559s` |
| `/health` 成功率 | `5/6`1 次 8s 超时 | `6/6` |
| 首页 `HEAD /` 中位耗时 | `1.817s` | `1.315s` |
| ICMP 平均延迟 | `238ms`10% 丢包 | `57ms`30% 丢包 |
测试命令使用 `curl --noproxy '*' -4`,本机未检测到 `HTTP_PROXY``HTTPS_PROXY``ALL_PROXY` 环境变量。ICMP 结果只作参考HTTPS curl 结果优先。
## nginx 限速边界
- `catproxy.lilifamily.com`3c4g 主站直连入口,当前没有 nginx `limit_req` / `limit_conn`,也没有 IP 白名单。
- `origin.proxy.api.lilifamily.com`3c4g 回源入口,当前没有 nginx 速率限制;只允许 JPpro IP `151.242.164.72`,并校验 `X-Proxy-Ng-Token`
- `proxy.api.lilifamily.com` / `jp.proxy.api.lilifamily.com`JPpro 入口节点,有 nginx 按客户端 IP 的速率和并发限制。
JPpro 当前入口限制:
```nginx
limit_req_zone $binary_remote_addr zone=req_per_ip:20m rate=10r/s;
limit_req_zone $binary_remote_addr zone=auth_per_ip:10m rate=10r/m;
limit_conn_zone $binary_remote_addr zone=conn_per_ip:20m;
limit_conn conn_per_ip 50;
limit_req zone=req_per_ip burst=30 nodelay;
limit_req_status 429;
```
认证相关路径更严格:
```nginx
limit_req zone=auth_per_ip burst=3 nodelay;
limit_conn conn_per_ip 10;
```
## Sub2API 业务请求限速维度
Sub2API 的模型/API 网关业务请求不是按 IP 限速,而是按用户、用户+分组、API Key 额度做限制。
业务 RPM 计数 Redis key
```text
rpm:u:{userID}:{minute}
rpm:ug:{userID}:{groupID}:{minute}
```
含义:
- 用户级 `rpm_limit`:同一用户全局每分钟请求数上限,`0` 表示不限。
- 分组级 `rpm_limit`:同一用户在某个分组内每分钟请求数上限,`0` 表示不限。
- 用户-分组 `rpm_override`:管理员可给某个用户在某个分组设置专属 RPM。
- API Key 的 `rate_limit_5h` / `rate_limit_1d` / `rate_limit_7d`:按费用消耗窗口限制,不是请求次数。
登录、注册、验证码等公开认证接口另有应用内 Redis 限速,维度是 `c.ClientIP()`
## 生产快照
通过 Tabby profile `个人-US-racknerd-0526-3c4g` 查询 PostgreSQL 的非敏感限速字段:
- 用户 `zizi2000email@gmail.com``rpm_limit = 0`
- 分组 `briqt``rpm_limit = 40`
- 分组 `omm``rpm_limit = 100`
- 分组 `free日卡-20刀``plus号池-使用余额``free周卡-每天50刀``free月卡-每天60刀``rpm_limit = 20`
- 分组 `pro号池-使用余额``rpm_limit = 30`
- API Key `briqt``rate_limit_5h = 300``rate_limit_1d = 500`
- API Key `free``rate_limit_1d = 50`
- API Key `omm`:窗口额度均为 `0`,表示不限。
后续如果用户反馈“主站请求被限速”,先判断入口:
1.`proxy.api.lilifamily.com` 时,先看 JPpro nginx 是否返回 `429`
2.`catproxy.lilifamily.com` 时,跳过 nginx IP 限速排查,直接看 Sub2API 业务层错误。
3. 如果错误是 `rate_limit_exceeded`,优先查用户/分组 RPM 或 API Key 窗口额度。
4. 如果错误来自上游模型账号 `rate_limit_error`,那是账号池或上游限流,不是用户/IP 限流。