gongxiangp2/docs/NETWORK_TOPOLOGY.md
chenpei 4712175cb0 feat(素材链路): 发布白底图双轨与AI生图回传能力
- 完成白底图 WebP 双轨接口、上传链路与预览缓存改造
- 新增 AI 生图平台成品回传接口、任务状态与表单规则
- 补齐 AI 生成标签、任务详情补全、相关测试与对接文档
2026-03-25 10:28:02 +08:00

216 lines
8.1 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-03-19):
> - `sc.jiansun.vip -> 180.97.221.140 -> nginx -> 127.0.0.1:2321(主) / 127.0.0.1:2320(备)`
> - `sc` 专用穿透已独立:`192.168.58.20 frpc-sc-entry(0.65.0) -> 180.97.221.140:7002 frps-sc-entry(0.65.0) -> 127.0.0.1:2321/2322`
> - `3d.yydd.ai` 目前仍直接走南京机旧链路 `127.0.0.1:2320`,所以旧 `2320` 不能立刻下线
> - `s3.jiansun.vip -> 180.97.215.57 -> nginx cache(/data/nginx-cache/s3, 180g) -> 127.0.0.1:29000 -> FRP -> 192.168.58.20:9000`
> - `s3.jiansun.vip` 当前已经收口为“预览图优先缓存”:
> - `AI 生图平台`:`/gongxiangpan/uploads/` 下的图片对象进入长缓存
> - `素材库`:`preview-*`、`display-*`、`model-*`、`video-cover-*`、`audio-cover-*`、`pdf-preview-*`、`product-package/*-preview` 这类预览图片对象进入长缓存
> - `video-preview-*.mp4`、`video-clip-*.mp4`、压缩包、源文件下载等大对象继续 `BYPASS`
> - `s3.yydd.ai -> 180.97.221.140`,当前只保留为备用 / 回切域名,不再作为默认资源入口维护
> - 两端 `WireGuard` 当前都是停用状态,仅保留安装与配置,现网主链路已经回到 `FRP`
>
> 最后更新:2026-03-19
> 本文档优先记录“当前现网已验证的对外行为”和“项目内实际配置”。南京入口机的内层转发细节,如需继续下钻,请以服务器现场配置为准。
## 当前结论
- 主站主域名:`sc.jiansun.vip -> 180.97.221.140`
- 当前主站入口已经切到南京服务器
- 旧主站域名:`3d.yydd.ai -> 103.146.230.120`
- 现网行为是 `301` 跳转到 `https://sc.jiansun.vip/`
- 资源主域名:`s3.jiansun.vip -> 180.97.215.57`
- 当前对外资源默认统一使用这个域名
- 当前已启用第一层 nginx 磁盘缓存
- 资源备用域名:`s3.yydd.ai -> 180.97.221.140`
- 当前只作为备用 / 回切域名保留,不再作为默认资源入口
- 项目运行配置已经切到新主域名:
- `APP_PUBLIC_URL=https://sc.jiansun.vip`
- `NEXTAUTH_URL=https://sc.jiansun.vip`
- 当前第一层桶缓存实施不依赖 AI 生图平台业务代码改造
- 主要改动发生在 `180.97.215.57` 的入口层
## 当前对外链路
### 1. 主站访问
```text
公网用户
-> DNS
-> sc.jiansun.vip
-> 180.97.221.140(南京入口机)
-> 当前站点入口
-> 登录页 / 首页 / API
```
说明:
- 备案完成后,主站对外入口已经从旧方案切到南京服务器
- 仓库内没有保存南京入口机完整 nginx / FRP 配置,因此这里只记录已验证的入口行为,不强行推断内层链路
### 2. 旧主站域名兼容
```text
公网用户
-> 3d.yydd.ai
-> 103.146.230.120
-> nginx 301
-> https://sc.jiansun.vip/
```
说明:
- `3d.yydd.ai` 现在主要承担旧域名兼容和跳转入口,不再作为默认主站域名使用
### 3. 资源访问
```text
公网用户
-> s3.jiansun.vip
-> 180.97.215.57
-> nginx cache(仅预览图长缓存,大对象回源)
-> 127.0.0.1:29000
-> FRP
-> 192.168.58.20:9000
```
说明:
- 当前默认资源入口已经切到 `s3.jiansun.vip`
- 第一层缓存命中后,省掉的是 `180.97.215.57 <-> FRP <-> 192.168.58.20:9000` 这一整段回源开销
- 当前入口层缓存重点服务“打开网页加载图片”这一环节,不接管源文件下载链路
- `s3.yydd.ai` 仍可保留,但不再作为默认新流量入口
## 已验证证据
### 1. 公网 DNS(2026-03-19)
- `sc.jiansun.vip -> 180.97.221.140`
- `3d.yydd.ai -> 103.146.230.120`
- `s3.jiansun.vip -> 180.97.215.57`
- `s3.yydd.ai -> 180.97.221.140`
以上结论已用公网 DoH 实测确认:
- `https://dns.google/resolve?name=sc.jiansun.vip&type=A`
- `https://dns.google/resolve?name=3d.yydd.ai&type=A`
- `https://dns.google/resolve?name=s3.jiansun.vip&type=A`
- `https://dns.google/resolve?name=s3.yydd.ai&type=A`
### 2. HTTP 行为(2026-03-19)
- `curl -I https://sc.jiansun.vip`
- 返回 `307` 到 `/login`,继续访问可得到 `200 OK`
- 响应头包含 `X-Powered-By: Next.js`
- `curl -I https://3d.yydd.ai`
- 返回 `301 Moved Permanently`
- `Location: https://sc.jiansun.vip/`
- `curl -I https://s3.jiansun.vip`
- 当前返回对象存储风格的 `400 Bad Request`
- 命中上传对象路径时可返回 `X-Cache-Status: HIT`
- `curl -I https://s3.yydd.ai`
- 当前 HTTPS 行为不稳定,实测会出现 `connection reset`
- 不应再作为默认资源入口口径
## 项目内对应配置
### 1. 主域名配置
- `docker-compose.yml`
- `APP_PUBLIC_URL=https://sc.jiansun.vip`
- `NEXT_PUBLIC_DINGTALK_CALLBACK_ORIGIN=https://sc.jiansun.vip`
- `NEXTAUTH_URL=https://sc.jiansun.vip`
- `lib/public-app-url.ts`
- 默认对外主域名是 `https://sc.jiansun.vip`
- 旧域名 `https://3d.yydd.ai` 保留在兼容列表中
### 2. 对外下载链接生成
- `app/api/external/product-assets/route.ts`
- `app/api/external/standard-model-white-background/route.ts`
这两个外部接口都会通过 `getPublicAppOrigin()` 生成对外下载链接,因此默认会落到 `sc.jiansun.vip`。
### 3. 资源域名配置
- `docker-compose.yml`
- `S3_PUBLIC_DOMAIN=https://s3.yydd.ai/gongxiangpan`
- `lib/url-rewrite.ts`
- 仍把 `s3.yydd.ai` 视为当前公网资源域名
说明:
- 以上是当前仓库里的历史代码口径,不代表 AI 生图平台本期第一层缓存实施口径
- 本期实际实施口径已经收敛为:`s3.jiansun.vip` 主用,`s3.yydd.ai` 备用
### 4. 历史南京直连口痕迹
- `middleware.ts` 里仍保留 `http://180.97.221.140:2320`
这说明:
- 项目内还保留着南京旧 TCP 直连口的兼容痕迹
- 但当前对外主站口径应以 `https://sc.jiansun.vip` 为准
## 口径变更说明
- `2026-03-09` 那版文档里把 `103.146.230.120` 写成“当前公网主入口”,这个口径现在已经失效
- 当前正确口径应当是:
- `sc.jiansun.vip`:主站主域名,当前解析到南京 `180.97.221.140`
- `3d.yydd.ai`:旧主站域名,当前保留跳转
- `s3.jiansun.vip`:当前资源主域名,解析到 `180.97.215.57`
- `s3.yydd.ai`:当前资源备用域名,解析到 `180.97.221.140`
- 也就是说,当前已经不是“资源域名暂未切走”,而是“资源默认入口已切到 `s3.jiansun.vip`,`s3.yydd.ai` 只保留备用”
## 当前风险与待确认项
- 主站入口和资源入口分属不同公网 IP,网络问题不能混看
- 仓库内未保存南京入口机完整的现场配置
- 如果后续要继续追 `sc.jiansun.vip` 的内层代理路径,需要直接登录 `180.97.221.140` 核对
- `s3.yydd.ai` 历史引用仍存在
- 这不会阻塞第一层桶缓存实施
- 但后续仍需要单独治理历史 URL 残留
- 当前第一层缓存已经扩展为“预览图优先缓存”
- 已纳入:`/gongxiangpan/uploads/` 图片、素材库预览图、`product-package/*-preview`
- 仍未纳入:`video-preview-*.mp4`、`video-clip-*.mp4`、压缩包、源文件下载
- 如果后续还要优化 `image-proxy` 或 `proxy-media` 自身处理耗时,需要单独做二期
## 推荐验证命令
### 公网 DNS 验证
```bash
curl -sS "https://dns.google/resolve?name=sc.jiansun.vip&type=A"
curl -sS "https://dns.google/resolve?name=3d.yydd.ai&type=A"
curl -sS "https://dns.google/resolve?name=s3.jiansun.vip&type=A"
curl -sS "https://dns.google/resolve?name=s3.yydd.ai&type=A"
```
### HTTP 行为验证
```bash
curl -I https://sc.jiansun.vip
curl -I https://3d.yydd.ai
curl -I https://s3.jiansun.vip
curl -I https://s3.yydd.ai
```
### 跳转结果验证
```bash
curl -I -L https://3d.yydd.ai
curl -I -L https://sc.jiansun.vip
```
## 当前建议
- 对外沟通时,主站统一写 `https://sc.jiansun.vip`
- 旧域名 `https://3d.yydd.ai` 只作为兼容跳转说明,不再作为默认示例地址
- 资源直链默认统一写 `https://s3.jiansun.vip`
- `https://s3.yydd.ai` 只作为备用 / 回切说明,不再作为默认示例地址
- 当前建议继续维持:
- `180.97.215.57`:只做 `s3.jiansun.vip` 的预览图入口缓存
- `221.140` 剩余 `90G`:暂不重复缓存同一层原图,后续如要继续优化,再考虑给 `image-proxy / proxy-media` 结果层使用