mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-15 10:25:00 +03:00
1d85ef138e
* 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
103 lines
7.9 KiB
Plaintext
103 lines
7.9 KiB
Plaintext
---
|
|
title: Subscription
|
|
description: راهاندازی سرور اشتراک 3x-ui — قالبهای base64/JSON/Clash، پورتها و مسیرها، TLS، هدرهای پاسخ و قالبهای سفارشی.
|
|
icon: Rss
|
|
---
|
|
|
|
یک **اشتراک** (subscription) یک URL واحد است که همهی پیکربندیهای یک کلاینت را
|
|
برمیگرداند. برنامههای کلاینت آن را بهصورت دورهای تازهسازی میکنند، بنابراین وقتی
|
|
یک ورودی را تغییر میدهید، کلاینتها این تغییر را بهصورت خودکار دریافت میکنند. سرور
|
|
اشتراک بهعنوان یک سرور **جداگانه** از پنل اجرا میشود.
|
|
|
|
## فعالسازی و پیکربندی
|
|
|
|
سرور اشتراک بهصورت **پیشفرض روشن** است (`subEnable`). آن را در تنظیمات اشتراک
|
|
پنل پیکربندی کنید:
|
|
|
|
| Setting | Default | Meaning |
|
|
| ------------- | ------- | --------------------------------------------------------------- |
|
|
| `subPort` | `2096` | پورت گوشدادن (جدا از پنل). |
|
|
| `subListen` | _(همه)_ | آدرس اتصال (bind). |
|
|
| `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 در چند قالب روی مسیرهای مختلف ارائه میشود — فهرست **Base64** در
|
|
`subPath` و پیکربندی **JSON** (Xray-json) در مسیر JSON. URLها را بسازید و هر دو
|
|
بدنه را اینجا پیشنمایش کنید:
|
|
|
|
<SubscriptionBuilder />
|
|
|
|
## قالبهای خروجی
|
|
|
|
**قالب بر اساس مسیر انتخاب میشود** و هرکدام کلید فعالسازی مخصوص خود را دارند:
|
|
|
|
| Format | Path | Enabled by | Output |
|
|
| --------------------- | --------- | ---------------- | --------------------------------------------------- |
|
|
| **لینکهای خام** | `subPath` | همیشه (اگر روشن باشد) | فهرستی از لینکهای `vless://`، `vmess://`، … (هنگام فعالبودن `subEncrypt` با base64 رمزگذاری میشود). |
|
|
| **JSON** | `subJsonPath` | `subJsonEnable` | پیکربندی(های) کامل کلاینت Xray. |
|
|
| **Clash / Mihomo** | `subClashPath` | `subClashEnable` | پروفایل YAML. |
|
|
|
|
فقط ورودیهای فعالی که از **VLESS، VMess، Trojan، Shadowsocks، WireGuard، AmneziaWG، MTProto، TUIC یا Hysteria2**
|
|
استفاده میکنند در یک اشتراک ظاهر میشوند و بر اساس شاخص sub-sort آنها مرتب میشوند (TUIC و AmneziaWG در لینکهای خام و پروفایلهای Clash/Mihomo گنجانده میشوند اما از اندپوینتهای JSON حذف میشوند؛ MTProto در لینکهای خام گنجانده میشود). درخواست `subPath` همراه با هدر `Accept: text/html` (یا `?html=1`) بهجای بدنهی خام،
|
|
یک صفحهی اطلاعات خوانا برای انسان برمیگرداند.
|
|
|
|
### Base64 vs JSON
|
|
|
|
بدنهی **Base64** صرفاً همان لینکهای اشتراکگذاری است که با خط جدید به هم پیوسته و
|
|
با standard-base64 رمزگذاری شدهاند (با `subEncrypt` قابل تغییر است). بدنهی **JSON**
|
|
هر کلاینت را در یک پیکربندی کامل کلاینت Xray میپیچد — یک اسکلت ثابت (ورودیهای محلی
|
|
SOCKS/HTTP روی 127.0.0.1، DNS، مسیریابی، policy) بهعلاوهی یک outbound از نوع `proxy` که به ورودی
|
|
اشاره میکند. 3x-ui **برای یک کلاینت یک شیء پیکربندی واحد و برای چند کلاینت یک آرایه**
|
|
تولید میکند، از فرم تخت `settings` در outbound استفاده میکند
|
|
(`address`/`port`/`id`، `level: 8`) و `sockopt` را از `streamSettings` حذف میکند.
|
|
|
|
## هدرهای پاسخ
|
|
|
|
اشتراکها هدرهای استانداردی برمیگردانند که برنامههای سازگار آنها را میخوانند:
|
|
|
|
- **`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` استفاده میشود؛ اگر خالی باشد، هدر ارسال نمیشود.
|
|
|
|
**پس از ارتقا:** اگر `subProfileMode` هنوز تنظیم نشده و مقدار قبلی `subProfileUrl`
|
|
خالی یا فقط شامل فاصله باشد، بهجای لینک خودکار صفحه داخلی، حالت **بدون لینک**
|
|
انتخاب میشود. آدرس سفارشی غیرخالی قبلی در حالت **وبسایت سفارشی** حفظ میشود.
|
|
|
|
برای بازگرداندن لینک قبلی، در همین بخش **صفحه اشتراک داخلی** را انتخاب و تنظیمات
|
|
را ذخیره کنید. این صفحه آدرسهای اشتراک و پیکربندی گرهها را آشکار میکند، حتی
|
|
برای اشتراکهای رمزگذاریشده Happ.
|
|
|
|
## قالبهای سفارشی صفحه
|
|
|
|
برای برندینگ صفحهی HTML اشتراک، `subThemeDir` را به یک پوشهی حاوی قالب سفارشیِ
|
|
صفحهی اطلاعات اشاره دهید. توضیح (remark) هر کلاینت روی هر لینک کاملاً قابل
|
|
قالببندی است — به [لینکهای اشتراکگذاری ← متغیرهای remark](/docs/config/share-links#remark-template-variables) مراجعه کنید.
|
|
|
|
<Callout type="info">
|
|
سرور اشتراک را پشت TLS قرار دهید (با تنظیم `subCertFile`/`subKeyFile`، یا یک
|
|
[پروکسی معکوس](/docs/operations/reverse-proxy)) تا محتوای اشتراک در حین انتقال
|
|
افشا نشود.
|
|
</Callout>
|