# VTY 品牌域名防护体系 · 产品需求文档（PRD）

| 字段 | 内容 |
|------|------|
| 项目代号 | `vty-domain-shield` |
| 归属 | VTY 体系 · **独立子项目**（与前台站点、中控、操作文档解耦） |
| 文档版本 | v1.0 |
| 状态 | 待评审 |
| 适用角色 | 产品 / 技术 / 运维 / 测试 / 风控 |
| 修订日期 | 2026-08-26 |

---

## 0. 一页结论（评审先看）

**要解决什么：** 品牌域名（如 `winbet.com`）一旦直接挂站点内容，极易被举报、监控、扫描，导致品牌资产被污染或封禁。需要一套「品牌域零内容 + 双段跳转 + 动态分享 + 来源可统计」的长期可用方案。

**怎么做（两段保护）：**

1. **运维侧（第一段）**：品牌域名在边缘层做 **纯 301**，域名上 **无任何业务内容、无 HTML、无静态资源**。
2. **技术侧（第二段）**：用户落到「跳转入口 / 域名池」后，由系统 **二次跳转到当前可用站点域名**；分享域名 **动态解析** 当前已二次跳转后的站点域；品牌域进入流量 **可埋点统计**。

**最终目标：** 品牌域名长期干净可续用；真实站点域名可轮换、可止血；分享链路永远指到「当前活站」；品牌引流可量化。

---

## 1. 需求背景

### 1.1 业务背景

- VTY 对外有 **品牌域名**（示例：`winbet.com` 一类主品牌域），用于广告、投放、口碑传播、线下物料等「品牌入口」。
- 真正承载产品能力的是 **站点域名池**（可轮换的业务域），会因监管、投诉、DNS 污染、CDN 风控等原因失效。
- 若品牌域直接反代/托管完整站点：
  - 扫描器、举报通道可直接抓到业务页面特征；
  - 品牌域与站点域「同生共死」，品牌资产被牵连；
  - 分享链接写死后，站点一换全线失效。

### 1.2 现状问题（假设痛点，评审可改）

| 问题 | 影响 |
|------|------|
| 品牌域挂内容或被反代到站点 | 易被扫描/举报；品牌域高风险 |
| 仅一次跳转、跳转目标写死 | 站点域被封后入口全挂 |
| 分享链接写死站点域 | 换域后历史分享全部失效 |
| 无法区分「是否从品牌域进来」 | 投放/品牌效果无法统计 |
| 运维与技术职责混在一起 | 出事后不清楚谁切 301、谁切域名池 |

### 1.3 为什么独立成项目

- 域名防护是 **跨前台、中控、投放、运维** 的基础设施能力，不应绑死在某一个业务仓库里。
- 需要单独的配置中心、解析 API、埋点口径、值班 Runbook，便于评审与验收。

---

## 2. 目标与非目标

### 2.1 目标（Must）

1. **品牌域名零内容**：对外任何探测（GET/HEAD/爬虫）仅见跳转或空响应策略约定结果，**不得出现业务页、登录页、活动页、接口文档、目录列表**。
2. **两段保护可落地**：
   - 运维侧：品牌域 → 跳转入口域（301，边缘完成）；
   - 技术侧：跳转入口 → 当前站点域（域名池二次跳转）。
3. **最终站点域长期可用**：通过域名池轮换、健康探测、一键摘除，保证用户可到达活站。
4. **分享域名动态获取**：分享侧不写死站点域，而是解析「当前二次跳转后的站点域」。
5. **品牌来源可统计**：凡经品牌域进入的会话，埋点可归因到具体品牌域（及可选投放参数）。
6. **职责清晰**：技术做什么、运维做什么、测试验什么，评审一眼能拆工单。

### 2.2 非目标（Out of Scope / 本期不做）

- 不在本 PRD 内实现完整前台业务功能（充值、投注等）。
- 不替代法务/合规对品牌物料的审批流程（仅提供技术承载方案）。
- 不承诺对抗国家级深度流量分析；目标是 **降低被举报/被扫描到业务内容的概率**，并 **提升站点域可替换性**。
- 不把「短链营销平台」做成完整 SaaS（仅定义分享解析与跳转所需最小能力）。

### 2.3 成功标准（可量化）

| 指标 | 目标 |
|------|------|
| 品牌域内容探测 | 自动化扫描 0 命中业务特征页（见测试章） |
| 站点域故障切换 | 摘除故障域后，新用户 ≤ 1 分钟内落到新活站（配置 TTL 内） |
| 分享解析正确率 | ≥ 99.9% 返回「当前主站域」 |
| 品牌归因覆盖率 | 品牌域 hop 进入会话，埋点带 `brand_domain` ≥ 99% |
| 角色 Runbook | 封禁/攻击场景，技术与运维各有可执行步骤 |

---

## 3. 术语与域名分层

> 评审约定：下文用「角色名」称呼域名类型，落地时由配置中心登记真实 FQDN。

| 角色 | 示例（虚构） | 是否允许业务内容 | 职责摘要 |
|------|--------------|------------------|----------|
| **品牌域 Brand** | `winbet.com` / `www.winbet.com` | **禁止** | 对外品牌入口；仅运维边缘 301 |
| **跳转入口域 Entry** | `go-xx.net` 等入口池 | 仅允许「跳转页/接口」，禁止完整站点 | 技术二次跳转与风控入口 |
| **站点域 Site** | `play-a.com` 等站点池 | **允许**完整业务 | 真实产品承载 |
| **分享域 Share** | `s-xx.com` | 仅短链/解析跳转 | 动态给出当前 Site |
| **埋点/采集域 Track** | `t-xx.com` 或走站点同源采集 | 仅采集接口 | 统计品牌来源等 |
| **管理域 Admin** | 内网或独立管理域 | 管理后台 | 域名池/开关/审计（不对公品牌域暴露） |

### 3.1 核心原则

1. **品牌域永不托管业务内容**（含错误页定制文案、品牌落地页、JS SDK 大包）。
2. **站点域可牺牲、可轮换**；品牌域尽量不动、不暴露。
3. **分享永远解析「当前 Site」**，不解析「历史 Site」。
4. **归因凭证在第一跳生成、第二跳透传、落地核销**，防止凭空刷量。

---

## 4. 总体方案（架构）

### 4.1 双段跳转主路径

```text
用户点击物料 / 输入品牌域
        │
        ▼
┌───────────────────────────────┐
│ ① 运维侧 · 品牌域边缘         │
│ DNS → CDN/LB                  │
│ 仅返回 HTTP 301               │
│ Location: https://{Entry}/... │
│ 无 Body / 无业务资源          │
└───────────────┬───────────────┘
                │
                ▼
┌───────────────────────────────┐
│ ② 技术侧 · 域名池二次跳转     │
│ Entry 校验 + 风控 + 选活站    │
│ 302/307 → https://{Site}/...  │
│ 写入 hop 凭证 & 埋点          │
└───────────────┬───────────────┘
                │
                ▼
        用户进入当前可用站点
```

### 4.2 分享路径

```text
用户打开分享链接 https://{Share}/{code}
        │
        ▼
Share 服务查询「当前主 Site」（与 Entry 二次跳转同一数据源）
        │
        ▼
302/307 → https://{Site}/...  （可带分享归因，不一定带品牌归因）
```

### 4.3 关键数据流（品牌进入）

1. 运维 301 的 Location 必须带 **可校验的 hop 参数**（或固定 path 映射到品牌 ID），例如：  
   `https://entry.example/r/{brandId}?sig=...&ts=...`
2. Entry 校验签名/时效 → 生成 `hop_id` → 二次跳到 Site，URL 或 Cookie/Local 凭证携带 `brand_domain` / `brand_id`。
3. Site 首屏或网关上报：`entry_type=brand`、`brand_domain`、`hop_id`、UA、落地 path。
4. 统计侧去重（同一 `hop_id` 只计一次有效进入）。

---

## 5. 运维要做什么（Ops）

> 本章是运维实施与值班的「做什么」；验收标准见第 9 章。

### 5.1 职责清单

| 编号 | 事项 | 说明 |
|------|------|------|
| O-1 | 品牌域 DNS | 仅指向「纯跳转边缘」；禁止指向站点源站 / 对象存储站点桶 |
| O-2 | 边缘 301 规则 | 全路径强制 HTTPS；统一 301 到 Entry；**禁止 200 业务页** |
| O-3 | 证书与 TLS | 品牌域证书有效；建议 HSTS（评审决定是否 preload） |
| O-4 | 空内容硬化 | 关闭目录索引、默认欢迎页、探针页、Server 指纹过度暴露 |
| O-5 | WAF/ACL 基线 | 品牌域仅允许必要方法（建议仅 GET/HEAD）；限制异常扫描 |
| O-6 | 监控告警 | 品牌域出现非 301、出现 Body、证书到期、解析漂移 |
| O-7 | 变更与审计 | 任何品牌域 Location 变更走工单；保留变更记录 |
| O-8 | 封禁应急 | 品牌域被污染时的「只保留跳转 / 切备用 Entry」SOP |

### 5.2 品牌域「零内容」强制规范

**允许：**

- DNS 记录（A/AAAA/CNAME）指向跳转边缘；
- TLS 握手；
- `301/308`（推荐 301）且 `Location` 指向 Entry；
- 必要的安全响应头（如 `Strict-Transport-Security`）。

**禁止：**

- 任何 HTML/JS/CSS/图片/字体业务资源；
- 反向代理到站点应用；
- 在品牌域部署「品牌介绍页」「下载页」「客服页」；
- 开放无关端口与管理入口；
- 把品牌域加入站点 CDN 的「同站缓存组」导致内容串域。

**探测判定（运维自检）：**

```text
curl -sI https://winbet.com/
# 期望：HTTP/2 301（或 308）
# 期望：Location 指向 Entry
# 期望：无业务 Set-Cookie（若必须 Cookie，需评审例外）
curl -sL --max-redirs 0 https://winbet.com/ | wc -c
# 期望：Body 为空或仅边缘默认极短响应（以规范为准，推荐空）
```

### 5.3 运维侧防封策略

| 策略 | 做法 |
|------|------|
| 品牌与站点隔离 | 品牌域永不解析到 Site IP/源站 |
| 多 Entry 热备 | 301 目标可在多个 Entry 间切换（配置中心 + 边缘规则） |
| 低暴露面 | 品牌域不提供 API、不提供 robots 业务说明、不提供 sitemap 业务 URL |
| 注册商/DNS 分散 | 品牌域 DNS 与站点域 DNS 供应商可分离，降低连带 |
| 证书独立 | 品牌域证书不与站点域乱配 SAN 混用（避免证书透明度关联过度） |
| 变更冷静期 | Location 变更灰度 + 回滚开关 |

### 5.4 运维侧防攻击策略

| 策略 | 做法 |
|------|------|
| 方法限制 | 仅 GET/HEAD；拒绝 POST/PUT 等 |
| 速率限制 | 对品牌域做连接/请求速率限制，防扫库式探测 |
| WAF 基础规则 | 拦截常见漏洞探测路径（即便会 301，也减少边缘开销） |
| Bot 管理（可选） | 对高频扫描 UA/IP 挑战或丢弃 |
| DDoS 防护 | 品牌域接入边缘清洗；攻击时保「跳转可用」优先于「开放探测」 |
| 日志脱敏 | 品牌域访问日志保留状态码/Location/IP 哈希；不落业务数据 |

### 5.5 运维交付物

1. 《品牌域接入清单》模板（域名、DNS、证书、301 Location、负责人）  
2. 边缘配置样例（Nginx / CDN Rule，评审选用）  
3. 监控看板：301 占比、非 301 告警、证书到期、解析一致性  
4. 应急 Runbook：品牌域异常 / Entry 不可用 / 证书失败  

---

## 6. 技术要做什么（Tech）

> 本章是研发与架构的「做什么」；接口以逻辑契约描述，实现可选 Worker/网关/BFF。

### 6.1 职责清单

| 编号 | 事项 | 说明 |
|------|------|------|
| T-1 | 域名池服务 | 维护 Entry / Site / Share 池状态：启用、权重、健康、主备 |
| T-2 | 二次跳转 | Entry 根据策略选出当前 Site，302/307 跳转 |
| T-3 | 分享解析 | Share 动态返回/跳转到「当前二次跳转所用的 Site」 |
| T-4 | 品牌归因 | 校验运维 hop → 生成 `hop_id` → 落地埋点 |
| T-5 | 配置中心/管理端 | 域名上下线、主站切换、审计日志（管理域） |
| T-6 | 健康探测 | 对 Site/Entry 主动探测；不健康自动摘除 |
| T-7 | 防刷与风控 | 跳转接口防伪造、防重放、防批量撞库式跳转 |
| T-8 | 观测 | 跳转成功率、池容量、归因成功率、分享解析延迟 |

### 6.2 域名池模型（逻辑）

**Site 记录字段（最小集）：**

| 字段 | 说明 |
|------|------|
| `domain` | FQDN |
| `status` | `active` / `standby` / `disabled` / `blocked` |
| `weight` | 流量权重 |
| `is_primary` | 是否当前主站（分享解析默认读主站） |
| `health` | 最近探测结果 |
| `tags` | 地区/线路等 |
| `updated_at` / `operator` | 审计 |

**规则：**

- Entry 二次跳转与 Share 解析 **共用同一「当前 Site」决策**（避免分享到 A、入口跳到 B）。
- `blocked` 域立即从决策中剔除；人工确认后可回池。

### 6.3 二次跳转（Entry）行为

1. 接收来自品牌域 301 的请求（带 `brandId`/`sig`/`ts` 或等价映射）。  
2. 校验：签名、时效、品牌是否启用。  
3. 风控：IP/UA/频率；可疑可降级到验证页（验证页只在 Entry，不在品牌域）。  
4. 选择 Site：`primary` 优先，否则按权重从 healthy 集合选取。  
5. 签发 `hop_id`（一次性或短TTL）。  
6. 302/307 到 `https://{site}/?_hop=...` 或 Set-Cookie（需 Secure/HttpOnly/SameSite 评审）。  
7. 异步记：跳转成功日志（品牌、Entry、Site、耗时）。

**失败降级：**

- 无可用 Site → 返回统一维护响应（仅 Entry 上），并告警；
- 签名失败 → 404/410，不暴露池信息。

### 6.4 分享域动态获取

**产品要求：** 分享域名不固化站点域；任何时刻解析结果 = 「当前域名池二次跳转会落到的站点域」。

**推荐接口（逻辑）：**

- `GET /api/v1/resolve/current-site`  
  - 鉴权：服务端密钥 / 边缘 mTLS / 签名（不对公匿名滥刷）  
  - 返回：`{ "site": "play-a.com", "https": true, "version": "..." }`
- `GET /{code}`（面向用户）  
  - 302 到 `https://{currentSite}/...` + 分享归因参数

**客户端/投放侧规范：**

- App、社群、代理后台「一键复制分享链接」必须调 Share/Resolve，禁止缓存超过配置 TTL（建议 ≤ 60s，可配置）。

### 6.5 埋点监控（品牌来源）

**必须上报字段：**

| 字段 | 说明 |
|------|------|
| `entry_type` | `brand` / `share` / `direct` / `other` |
| `brand_domain` | 如 `winbet.com`（仅 brand 有） |
| `brand_id` | 配置中心 ID |
| `hop_id` | 去重与稽核 |
| `entry_domain` | 实际 Entry |
| `site_domain` | 实际落地 Site |
| `landing_path` | 落地路径 |
| `ts` / `ua` / `ip_hash` | 基础维度 |

**统计口径：**

- **品牌进入 UV/PV**：`entry_type=brand` 且 `hop_id` 首次核销；
- **品牌→注册/充值**：用 `hop_id` 或会话归因链路关联（与现有数据仓库对齐）；
- 禁止只靠 Referer（品牌域 301 后 Referer 不稳定，只能作辅助）。

### 6.6 技术侧防封策略

| 策略 | 做法 |
|------|------|
| 站点池容量 | 维持 N 个可切 Site（容量指标进 SLO） |
| 自动摘除 | 健康检查失败自动 `disabled`，告警人工复核 |
| 主站秒切 | 管理端一键切换 `is_primary`，Entry/Share 同步 |
| 入口池 | 多个 Entry，品牌 301 可切备用 Entry（与运维联动） |
| 特征收敛 | Entry 页极简，减少可指纹业务特征 |
| 配置下发 | 边缘/节点短 TTL 拉取池状态，避免长缓存指到死域 |

### 6.7 技术侧防攻击策略

| 策略 | 做法 |
|------|------|
| 跳转参数签名 | HMAC + 时间窗，防伪造品牌归因 |
| 防重放 | `hop_id` 一次性核销或短 TTL |
| Resolve 鉴权 | 分享解析接口防未授权批量拉取池信息 |
| 速率限制 | Entry/Share/Track 分层限流 |
| 信息隐藏 | 错误响应不返回完整域名池列表 |
| WAF/Bot | Entry/Share 接入防护；管理 API 独立网络策略 |
| 审计 | 所有域名状态变更、主站切换写审计日志 |

### 6.8 技术交付物

1. 域名池服务 + 管理 API 说明  
2. Entry 二次跳转时序与状态码规范  
3. Share Resolve 契约与 SDK/调用示例  
4. 埋点字典与数仓字段对齐表  
5. 技术应急 Runbook：Site 全挂 / 归因刷量 / 解析被刷  

---

## 7. 技术 × 运维协作接口（必须对齐）

| 接口点 | 运维提供 | 技术提供 | 共同约定 |
|--------|----------|----------|----------|
| 品牌 → Entry | 301 Location 模板 | Entry path/签名算法 | Location 必须可归因到 brand |
| Entry 切换 | 改边缘 Location | Entry 池健康与容量 | RTO：×× 分钟 |
| Site 被封 | DNS/CDN 侧可协助摘除解析 | 池状态切换主站 | 技术主责切换，运维协助清理 |
| 证书 | 品牌/Entry/Share 证书 | Site 证书（或共同） | 到期日历共享 |
| 攻击 | 边缘清洗、封禁 IP | 应用限流、签名失效 | 联合演练 |
| 监控 | 边缘状态码、带宽 | 跳转成功率、池健康 | 统一告警升级路径 |

**变更原则：**  
- 改品牌域 301 → **运维主责**，技术复核 Location 是否可被 Entry 校验。  
- 改当前 Site → **技术主责**，运维无需改品牌域（这是方案价值点）。

---

## 8. 关键场景与时序

### 8.1 品牌域首次进入

1. 用户访问 `https://winbet.com/`  
2. 边缘 301 → `https://{entry}/r/winbet?sig=...&ts=...`  
3. Entry 校验通过，选主站 `play-a.com`，生成 `hop_id`  
4. 302 → `https://play-a.com/?_hop=...`  
5. 站点核销 `_hop`，上报 `entry_type=brand, brand_domain=winbet.com`

### 8.2 站点域被封后的用户路径

1. 技术将 `play-a.com` 标 `blocked`，`play-b.com` 升主站  
2. 品牌域 **不改**（仍 301 到 Entry）  
3. 新用户经 Entry 自动到 `play-b.com`  
4. 分享 Resolve 同步返回 `play-b.com`  
5. 运维可选：清理 `play-a.com` 解析/缓存（协助）

### 8.3 分享链接

1. 代理复制链接 → 后台调 Resolve → 得到当前 Site 或得到 Share 短链  
2. 用户打开 Share 短链 → 302 当前 Site  
3. 埋点 `entry_type=share`（若该分享由品牌活动生成，可另有 `campaign_id`，与品牌 hop 区分）

---

## 9. 测试要做什么（QA）——评审可直接拆用例

### 9.1 品牌域零内容（P0）

| 用例 | 步骤 | 期望 |
|------|------|------|
| TC-B1 | HEAD/GET 品牌根路径 | 301/308，Location 到 Entry |
| TC-B2 | GET 品牌随机路径 `/login` `/promo` | 仍 301 到 Entry（或统一策略），**不得 200 业务页** |
| TC-B3 | 下载 Body | 无业务 HTML 特征（无标题/表单/钱包文案等） |
| TC-B4 | 常见扫描路径 | 不暴露源站指纹与业务资源 |
| TC-B5 | HTTP→HTTPS | 强制跳转安全 |

### 9.2 双段跳转（P0）

| 用例 | 步骤 | 期望 |
|------|------|------|
| TC-J1 | 完整跟随跳转（限制人工检查两跳） | 第一跳运维 301，第二跳技术 302/307 到 Site |
| TC-J2 | 伪造签名访问 Entry | 拒绝，不进入 Site |
| TC-J3 | 过期 ts | 拒绝 |
| TC-J4 | 主站切换后立即访问品牌域 | 落到新主站（在 TTL 内） |

### 9.3 分享动态解析（P0）

| 用例 | 步骤 | 期望 |
|------|------|------|
| TC-S1 | Resolve 当前 Site | 与 Entry 决策一致 |
| TC-S2 | 切换主站后再 Resolve | 返回新主站 |
| TC-S3 | 无鉴权滥刷 Resolve | 被拒绝或限流 |
| TC-S4 | 旧分享短链 | 仍跳到「当前」Site，而非创建时的旧 Site |

### 9.4 埋点归因（P0）

| 用例 | 步骤 | 期望 |
|------|------|------|
| TC-T1 | 品牌进入 | 事件含 `entry_type=brand` + `brand_domain` + `hop_id` |
| TC-T2 | 同一 hop_id 重复上报 | 有效进入只计 1 |
| TC-T3 | 直连 Site | 不得被记为品牌进入 |
| TC-T4 | 分享进入 | `entry_type=share`，不与品牌混淆 |

### 9.5 防封/防攻（P1）

| 用例 | 步骤 | 期望 |
|------|------|------|
| TC-F1 | 标记 Site blocked | 流量不再分配到该域 |
| TC-F2 | Entry 限流 | 超阈返回保护性响应 |
| TC-F3 | 品牌域只允许 GET/HEAD | POST 被拒 |
| TC-F4 | 管理 API 公网 | 不可未授权访问 |

### 9.6 验收签字栏（评审用）

| 角色 | 验收焦点 | 签字 |
|------|----------|------|
| 运维 | 品牌域零内容 + 301 + 监控 | |
| 技术 | 域名池 + 二次跳转 + 分享 + 埋点 | |
| 测试 | P0 用例全过 | |
| 产品 | 目标与口径确认 | |

---

## 10. 监控、告警与值班

### 10.1 运维监控

- 品牌域：非 301 比率、有 Body 告警、证书到期、DNS 漂移  
- 边缘：5xx、回源（品牌域应无业务回源）、带宽突刺  

### 10.2 技术监控

- Entry 跳转成功率、二次跳延迟  
- Site 池：healthy 数量、主站变更事件  
- Share Resolve：成功率、延迟、鉴权失败率  
- 埋点：品牌归因成功率、`hop` 核销失败率  

### 10.3 升级路径

1. Site 单点故障 → 技术切主站  
2. Entry 故障 → 运维切品牌 301 到备用 Entry + 技术修 Entry  
3. 品牌域被投诉/污染 → 运维保零内容与跳转；技术评估是否轮换 Entry；**尽量不把业务搬回品牌域**

---

## 11. 分期建议（便于排期）

### Phase 1（MVP）

- 品牌域纯 301 + Entry 二次跳转 + 单主站切换  
- 基础埋点（品牌进入）  
- 手工健康切换  

### Phase 2

- Share 动态解析与短链  
- 自动健康探测与摘除  
- 完整审计与看板  

### Phase 3

- 多品牌域批量接入  
- 更强 Bot/防刷与投放参数体系  
- 与代理后台「一键分享」打通  

---

## 12. 风险与开放问题（评审必答）

| 编号 | 问题 | 建议决策人 |
|------|------|------------|
| Q1 | 品牌域 301 是否允许带 path 透传？ | 产品+技术 |
| Q2 | hop 凭证用 URL 参数还是 Cookie？ | 技术+安全 |
| Q3 | HSTS preload 是否对品牌域启用？ | 运维+安全 |
| Q4 | 分享解析 TTL 与客户端缓存上限？ | 技术+运营 |
| Q5 | 品牌进入与付费归因窗口（7 日？） | 数据+产品 |
| Q6 | Entry 是否允许极简人机验证页？ | 风控+产品 |

---

## 13. 附录

### A. 角色 RACI（摘要）

| 事项 | 产品 | 技术 | 运维 | 测试 |
|------|------|------|------|------|
| 品牌零内容标准 | C | C | **A/R** | R |
| 301 配置 | C | C | **A/R** | R |
| 域名池与二次跳转 | C | **A/R** | C | R |
| 分享动态解析 | C | **A/R** | I | R |
| 埋点口径 | **A** | R | I | R |
| 防封演练 | C | R | R | R |
| 防攻击演练 | C | R | R | R |

### B. 示例：边缘 301（示意，非生产配置）

```nginx
# 品牌域 server：只跳转，不提供内容
server {
  listen 443 ssl http2;
  server_name winbet.com www.winbet.com;
  # ssl_certificate ...;

  location / {
    return 301 https://entry.example/r/winbet?ts=$msec&sig=...;
  }
}
```

> 生产签名应由边缘函数或统一网关生成，避免在配置文件写死可伪造参数。

### C. 文档维护

- 本项目仓库：`vty-domain-shield`  
- 本 PRD 为评审基线；变更需记版本与修订说明。

---

**文档结束。**
