mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-02 19:25:05 +03:00
9b91f0f42e
Fold the standalone 3x-ui-docs project (Next.js 16 + Fumadocs, deployed to docs.sanaei.dev) into docs/ so the panel and its documentation share a single source of truth, the way sing-box keeps its docs in-tree. The old repo becomes redundant and can be retired. - Import the full site under docs/ (app, components, content, lib, public, scripts, config). The self-contained pnpm project sits alongside the existing engineering notes with no filename collisions. - Re-point "Edit on GitHub" links from MHSanaei/3x-ui-docs to this repo's docs/content/docs path (docs/lib/shared.ts, docs/app/.../page.tsx). - Add docs-ci.yml and docs-deploy.yml under .github/workflows/, scoped to docs/** and run with working-directory: docs, since GitHub only runs workflows from the repo-root .github/. deploy-static.yml's GitHub Pages publish (CNAME docs.sanaei.dev) carries over unchanged. Follow-up (outside this commit): attach the docs.sanaei.dev custom domain to this repository's Pages (or set the Vercel project's root directory to docs), confirm the site is live from the monorepo, then delete MHSanaei/3x-ui-docs.
87 lines
6.2 KiB
Plaintext
87 lines
6.2 KiB
Plaintext
---
|
|
title: Subscription
|
|
description: راهاندازی سرور اشتراک 3x-ui — قالبهای base64/JSON/Clash، پورتها و مسیرها، TLS، هدرهای پاسخ و قالبهای سفارشی.
|
|
icon: Rss
|
|
---
|
|
|
|
یک **اشتراک** (subscription) یک URL واحد است که همهی پیکربندیهای یک کلاینت را
|
|
برمیگرداند. برنامههای کلاینت آن را بهصورت دورهای تازهسازی میکنند، بنابراین وقتی
|
|
یک ورودی را تغییر میدهید، کلاینتها این تغییر را بهصورت خودکار دریافت میکنند. سرور
|
|
اشتراک بهعنوان یک سرور **جداگانه** از پنل اجرا میشود.
|
|
|
|
## فعالسازی و پیکربندی
|
|
|
|
سرور اشتراک بهصورت **پیشفرض روشن** است (`subEnable`). آن را در تنظیمات اشتراک
|
|
پنل پیکربندی کنید:
|
|
|
|
| Setting | Default | Meaning |
|
|
| ------------- | ------- | --------------------------------------------------------------- |
|
|
| `subPort` | `2096` | پورت گوشدادن (جدا از پنل). |
|
|
| `subListen` | _(همه)_ | آدرس اتصال (bind). |
|
|
| `subPath` | `/sub/` | مسیر پایه برای URLهای خام اشتراک. |
|
|
| `subDomain` | _(هیچ)_ | میزبان عمومی؛ اگر تنظیم شود، سرور فقط به همان Host پاسخ میدهد. |
|
|
| `subCertFile` / `subKeyFile` | _(هیچ)_ | گواهی و کلید TLS — هنگام تنظیم، سرور **HTTPS** ارائه میدهد. |
|
|
| `subEncrypt` | `true` | بدنهی خام اشتراک را با base64 رمزگذاری میکند. |
|
|
| `subUpdates` | `12` | بازهی پیشنهادی تازهسازی (ساعت) که به کلاینتها ارسال میشود. |
|
|
|
|
یک URL اشتراک به این شکل است:
|
|
|
|
```text
|
|
https://<sub-host>:<sub-port>/sub/<sub-id>
|
|
```
|
|
|
|
که در آن `<sub-id>` همان **Sub ID** کلاینت است.
|
|
|
|
همان Sub ID در چند قالب روی مسیرهای مختلف ارائه میشود — فهرست **Base64** در
|
|
`subPath` و پیکربندی **JSON** (Xray-json) در مسیر JSON. URLها را بسازید و هر دو
|
|
بدنه را اینجا پیشنمایش کنید:
|
|
|
|
<SubscriptionBuilder />
|
|
|
|
## قالبهای خروجی
|
|
|
|
**قالب بر اساس مسیر انتخاب میشود** و هرکدام کلید فعالسازی مخصوص خود را دارند:
|
|
|
|
| Format | Path | Enabled by | Output |
|
|
| --------------------- | --------- | ---------------- | --------------------------------------------------- |
|
|
| **لینکهای خام** | `/sub/` | همیشه (اگر روشن باشد) | فهرستی از لینکهای `vless://`، `vmess://`، … (هنگام فعالبودن `subEncrypt` با base64 رمزگذاری میشود). |
|
|
| **JSON** | `/json/` | `subJsonEnable` | پیکربندی(های) کامل کلاینت Xray. |
|
|
| **Clash / Mihomo** | `/clash/` | `subClashEnable` | پروفایل YAML. |
|
|
|
|
فقط ورودیهای فعالی که از **VLESS، VMess، Trojan، Shadowsocks یا Hysteria2**
|
|
استفاده میکنند در یک اشتراک ظاهر میشوند و بر اساس شاخص sub-sort آنها مرتب میشوند.
|
|
درخواست `/sub/` همراه با هدر `Accept: text/html` (یا `?html=1`) بهجای بدنهی خام،
|
|
یک صفحهی اطلاعات خوانا برای انسان برمیگرداند.
|
|
|
|
### Base64 vs JSON
|
|
|
|
بدنهی **Base64** صرفاً همان لینکهای اشتراکگذاری است که با خط جدید به هم پیوسته و
|
|
با standard-base64 رمزگذاری شدهاند (با `subEncrypt` قابل تغییر است). بدنهی **JSON**
|
|
هر کلاینت را در یک پیکربندی کامل کلاینت Xray میپیچد — یک اسکلت ثابت (ورودیهای محلی
|
|
mixed/HTTP، 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`** — برندینگ اختیاری که برخی کلاینتها نمایش میدهند.
|
|
|
|
## قالبهای سفارشی صفحه
|
|
|
|
برای برندینگ صفحهی HTML اشتراک، `subThemeDir` را به یک پوشهی حاوی قالب سفارشیِ
|
|
صفحهی اطلاعات اشاره دهید. توضیح (remark) هر کلاینت روی هر لینک کاملاً قابل
|
|
قالببندی است — به [لینکهای اشتراکگذاری ← متغیرهای remark](/docs/config/share-links#remark-template-variables) مراجعه کنید.
|
|
|
|
<Callout type="info">
|
|
سرور اشتراک را پشت TLS قرار دهید (با تنظیم `subCertFile`/`subKeyFile`، یا یک
|
|
[پروکسی معکوس](/docs/operations/reverse-proxy)) تا محتوای اشتراک در حین انتقال
|
|
افشا نشود.
|
|
</Callout>
|