Files
3x-ui/docs/content/docs/fa/config/subscription.mdx
T
MHSanaei 9b91f0f42e docs: vendor the documentation site into the monorepo
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.
2026-07-07 23:07:14 +02:00

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>