Files
3x-ui/docs/content/docs/zh/config/subscription.mdx
T
NgaiYeanCoi 1d85ef138e fix(sub): prevent default profile page URL disclosure (#6538)
* fix(sub): prevent default profile page URL disclosure

Add explicit none, builtin, and custom profile page modes.
Preserve existing custom URLs and warn before exposing the built-in page.
Cover mode selection, legacy settings, and subscription response headers.

* fix(subscription): add profile page link options and upgrade notes
2026-09-15 21:13:29 +02:00

96 lines
6.8 KiB
Plaintext
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.
---
title: 订阅
description: 运行 3x-ui 订阅服务器 —— base64/JSON/Clash 格式、端口与路径、TLS、响应头以及自定义模板。
icon: Rss
---
**订阅**是一个返回客户端全部配置的单一 URL。客户端应用会定期刷新它,因此当你修改某个入站时,客户端会自动获取这些变更。订阅服务器作为一个**独立于**面板的服务器运行。
## 启用与配置
订阅服务器**默认开启**(`subEnable`)。在面板的订阅设置中进行配置:
| 设置 | 默认值 | 含义 |
| ------------- | ------- | --------------------------------------------------------------- |
| `subPort` | `2096` | 监听端口(与面板分开)。 |
| `subListen` | _(全部)_ | 绑定地址。 |
| `subPath` | _(每个面板随机生成)_ | 原始订阅 URL 的基础路径。 |
| `subDomain` | _(无)_ | 公开主机名;若设置,服务器仅响应该 Host。 |
| `subCertFile` / `subKeyFile` | _(无)_ | TLS 证书 + 密钥 —— 设置后,服务器以 **HTTPS** 提供服务。 |
| `subEncrypt` | `true` | 对原始订阅内容进行 base64 编码。 |
| `subUpdates` | `12` | 发送给客户端的建议刷新间隔(小时)。 |
一个订阅 URL 形如:
```text
https://<sub-host>:<sub-port>/<sub-path>/<sub-id>
```
其中 `<sub-id>` 是客户端的 **Sub ID**。
同一个 Sub ID 会在不同路径上以多种格式提供 —— `subPath` 上的 **Base64** 列表和 JSON 路径上的 **JSON**(Xray-json)配置。在此构建这些 URL 并预览两种内容:
<SubscriptionBuilder />
## 输出格式
**格式由路径决定**,每种格式都有各自的启用开关:
| 格式 | 路径 | 启用方式 | 输出 |
| ----------------------------- | ---------------- | ---------------- | --------------------------------------------------- |
| **原始链接** | `subPath` | 始终(若已开启) | 一组 `vless://`、`vmess://` 等链接的列表(当 `subEncrypt` 开启时进行 base64 编码)。 |
| **JSON** | `subJsonPath` | `subJsonEnable` | 完整的 Xray 客户端配置。 |
| **Clash / Mihomo** | `subClashPath` | `subClashEnable` | 完整的 Mihomo 兼容 YAML 配置。 |
| **Mihomo(明确端点)** | `/mihomo/` | `subClashEnable` | 完整 `subClashPath` 配置的别名。 |
| **Clash for Windows(旧版)** | `/clash-legacy/` | `subClashEnable` | 仅包含旧 Clash 内核支持的代理类型、传输方式和加密算法。 |
只有使用 **VLESS、VMess、Trojan、Shadowsocks、WireGuard、AmneziaWG、MTProto、TUIC 或 Hysteria2** 的已启用入站才会出现在订阅中,并按其订阅排序索引排列(TUIC 和 AmneziaWG 包含在原始链接和 Clash/Mihomo 配置中,但在 JSON 端点中被省略;MTProto 包含在原始链接中)。使用 `Accept: text/html` 头(或 `?html=1`)请求 `subPath` 会返回一个人类可读的信息页面,而非原始内容。
Clash Verge Rev、Mihomo 及其他仍在维护的 Mihomo 客户端应使用
`/mihomo/<sub-id>`。已经停止维护的 Clash for Windows 应使用
`/clash-legacy/<sub-id>`;旧版端点只保留兼容的 VMess、Trojan 和
Shadowsocks 节点,并排除 VLESS、Hysteria2、Reality、XHTTP、HTTPUpgrade
和 Shadowsocks 2022。如果没有任何兼容节点,端点会明确返回 `422`,而不是返回一份无法导入的 YAML。
为避免 Mihomo 专用语法进入旧版配置,此端点始终使用最小的 `PROXY` 策略组与
`MATCH,PROXY` 规则,并忽略自定义 Clash 路由设置。
如果管理员已经把 `/mihomo/` 或 `/clash-legacy/` 分配给其他可配置订阅路径,
系统会保留原有路径,并在启动时记录警告、跳过发生冲突的别名。
Clash 格式自动识别保留原有的 `(?i)(clash|mihomo)` 默认匹配器,确保已有订阅 URL
继续返回 YAML。它不区分旧版客户端与 Mihomo 系客户端;Clash for Windows 用户
必须使用 `/clash-legacy/<sub-id>` 获取兼容配置。
### Base64 与 JSON
**Base64** 内容只是用换行符连接的分享链接,经标准 base64 编码(通过 `subEncrypt` 开关控制)。**JSON** 内容则将每个客户端包装为一份完整的 Xray 客户端配置 —— 一套固定的骨架(绑定到 127.0.0.1 的本地 SOCKS/HTTP 入站、DNS、路由、策略)加上一个指向该入站的 `proxy` 出站。3x-ui **对单个客户端输出单个配置对象,对多个客户端输出数组**,使用扁平的出站 `settings` 形式(`address`/`port`/`id`,`level: 8`),并从 `streamSettings` 中剥离 `sockopt`。
## 响应头
订阅会返回兼容应用可读取的标准响应头:
- **`Subscription-Userinfo`** —— `upload`、`download`、`total`(字节;`total=0` 表示无限制)以及 `expire`(Unix 秒)。
- **`Profile-Update-Interval`** —— 刷新间隔,以小时为单位(`subUpdates`)。
- **`Profile-Title`**、**`Support-Url`**、**`Profile-Web-Page-Url`**、**`Announce`** —— 部分客户端会显示的可选品牌信息。
### 资料页链接与升级说明
在 **订阅 → 资料 → 资料页方式** 中选择 `subProfileMode`,对所有订阅客户端生效:
- **不提供**(`none`,默认):不发送 `Profile-Web-Page-Url`。
- **内置订阅页**(`builtin`):提供该客户端的内置订阅页链接。
- **自定义网站**(`custom`):使用 `subProfileUrl`;地址留空时不发送该响应头。
**升级提示:** 旧版在 `subProfileUrl` 留空时会自动提供内置订阅页链接。升级后,尚未设置模式且地址为空或仅含空白字符的配置会使用 **不提供**;已有非空地址继续使用 **自定义网站**。需要恢复内置入口时,在上述位置选择 **内置订阅页** 并保存设置。
内置订阅页会公开订阅地址和节点配置,Happ 加密订阅也不例外;请在确定需要提供这些内容时开启。
## 自定义页面模板
将 `subThemeDir` 指向一个包含自定义信息页模板的文件夹,即可为 HTML 订阅页面定制品牌。每条链接上的客户端备注完全支持模板化 —— 参见[分享链接 → 备注变量](/docs/config/share-links#remark-template-variables)。
<Callout type="info">
将订阅服务器置于 TLS 之后(设置 `subCertFile`/`subKeyFile`,或使用
[反向代理](/docs/operations/reverse-proxy)),以免订阅内容在传输过程中被暴露。
</Callout>